私は私の目的を達成することができましたが、なぜ私はまだ何か間違っていると心配しています。PowerShellスクリプトのParseExactが文字列ではなくint64を受け入れるのはなぜですか?
コンテキストは、FTPを使用してファイルのタイムスタンプを取得するために、別の日付との比較のためにdatetime値を取得することです。日時は、これを使用して文字列として受け取られます:
$FTPrequest = [System.Net.FtpWebRequest]::Create($FTPTargetFile)
$FTPrequest.Method = [System.Net.WebRequestMethods+FTP]::GetDateTimestamp
$FTPrequest.Credentials = $Credentials
$response = $FTPrequest.GetResponse().StatusDescription
$tokens = $response.Split(" ")
if ($tokens[0] -eq 213) {
$Timestampdata = $tokens[1]
} else {
Write-Output "FTP timestamp request for " + $FTPTargetFile + " returned an error"
}
私が見つけたほぼすべての使用可能なリソースがそれを明確ParseExactは、スクリプトの次の行のように日時を導出する文字列を使用することを作っ:
$d = [DateTime]::ParseExact($Timestampdata,"yyyyMMddHHmmss",$null)
スクリプト内かどうか、コマンドプロンプトで、一貫して上記の行は、次のエラーを返します。しかし:
Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime." At C:\hw-sw\powershell\FTPupload option - getFileInfo.ps1:38 char:1 + $d = [DateTime]::ParseExact($Timestampdata,"yyyyMMddHHmmss",$null) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : FormatException
を私が見つけた2つのリンク(lin1、012がありました- 第二リンクはslighty別の問題に対処するが、ポイントがまだ行われている)ParseExact()
は、スクリプトの次の行のように、代わりにINTxx処理を使用して提案:
$d = [DateTime]::ParseExact([convert]::ToInt64($Timestampdata),"yyyyMMddHHmmss",$null)
そして、はい、上記の行は、エラーなしで実行されます。
私はスクリプト問題の潜在的な解決策を見つけたことに感謝していますが、ParseExactがなぜint64で動作しているのか理解できないため、私は不安です。
PowerShellの動作方法を変更する設定がありますか?私は何か簡単な間違いをしているに違いないと信じていますが、私はそれを理解できません。
文字列に空白がありますか? '$ d = [datetime] :: parseexact($ Timestampdata.Trim()、" yyyyMMddHHmmss "、$ null)'を試してください。 –
優れた考え。しかし、はい、私は試みました.Trim()。行動に変化はない。 – Alan
再生できません。サンプル入力をお願いします。 –