85433


PowerShellのお勉強中です．  
バッチ処理で個々の処理の経過時間を出すために以下のようなコードを書きました．これはうまく動きます．

[code]

    $start_date_time = Get-Date
    # ここでそれなりに時間のかかる処理
    $end_date_time = Get-Date
    $time_span = New-TimeSpan -Start $start_date_time -End $end_date_time
    Write-Host 'Processing takes' $time_span.Minutes 'minutes ' $time_span.Seconds 'seconds.' -ForegroundColor Cyan -BackgroundColor Black
    
[/code]

結果

[code]

    Processing takes 0 minutes  2 seconds.
    
[/code]

関数を勉強したくて、試しに自分でモジュールを作って以下のような関数にしてみました．

[code]

    function Get-TimeSpan{
      [CmdletBinding()]
      param(
        [Parameter(Mandatory)]
        [System.DateTime]$startTime
      )
      $end_date_time = Get-Date
      $time_span = New-TimeSpan -Start $startTime -End $end_date_time
      return $time_span
    }
    
[/code]

これを次のように呼び出します．

[code]

    $start_date_time = Get-Date
    # ここでそれなりに時間のかかる処理
    $time_span = Get-TimeSpan -startTime $start_date_time
    Write-Host 'Processing takes' $time_span.Minutes 'minutes ' $time_span.Seconds 'seconds.' -ForegroundColor Cyan -BackgroundColor Black
    
[/code]

ところがこれはエラーになってしまいます．

[code]

    New-TimeSpan: Cannot bind parameter 'Start' to the target. Exception setting "Start": "Cannot convert null to type "System.DateTime"."
    
[/code]

引数がうまく渡っていないように見えるのですが、いったいどこが悪いのでしょうか？  
すみませんがご教示ください．

以上 よろしくお願いいたします．

［追記］  
PSVersionTableによるバージョン/環境は以下のとおりです．

[code]

    PS D:\My_Documents\XML2020\XXXXXX\docs\xml-php> $PSVersionTable
    
    Name                           Value
    ----                           -----
    PSVersion                      7.2.1
    PSEdition                      Core
    GitCommitId                    7.2.1
    OS                             Microsoft Windows 10.0.22000
    Platform                       Win32NT
    PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
    PSRemotingProtocolVersion      2.3
    SerializationVersion           1.1.0.1
    WSManStackVersion              3.0
    
[/code]


CC BY-SA 4.0
2022-01-01T07:13:14.350
85427
2022-01-01T23:01:21.367
2022-01-01T14:32:59.150
9503
9503
question
powershell
PowerShellの関数の作り方→引数がうまく渡らないみたいです．


コードに問題はないようです。  
こちらの環境で質問のコードをそのままコピー＆ペーストしたところ正常に動作しました。  
スクリプトに書いて実行してみましたが結果は同じく正常でした。

環境の問題ではないでしょうか。  
こちらの環境は以下です。

  * 実行環境のWindowsのバージョン  
エディション Windows 10 Pro  
バージョン 21H1  
インストール日 ‎2021/‎12/‎18  
OS ビルド 19043.1415  
エクスペリエンス Windows Feature Experience Pack 120.2212.3920.0

  * PowerShellのバージョン($PSVersionTable)  
PSVersion 5.1.19041.1320

【追記】  
次のバージョンでも結果は同じです。正常に動作します。  
7.2.1

[code]

    PS C:\Program Files\PowerShell\7> $PSVersionTable
    
    Name                           Value
    ----                           -----
    PSVersion                      7.2.1
    PSEdition                      Core
    GitCommitId                    7.2.1
    OS                             Microsoft Windows 10.0.19043
    Platform                       Win32NT
    PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
    PSRemotingProtocolVersion      2.3
    SerializationVersion           1.1.0.1
    WSManStackVersion              3.0
    
[/code]


CC BY-SA 4.0
2022-01-01T13:32:27.983
85433
2022-01-01T23:01:21.367
2022-01-01T23:01:21.367
35558
35558
85427
answer