0

Powershell で非常に奇妙なことが起こっています。

コードは次のとおりです。

add-pssnapin windows.serverbackup
$wbs = Get-Wbsummary
$lastbackuptime = $wbs.lastBackupTime
$solution = "Windows Server Backup"

$surl = "https://REDACTED:1338/REDACTED.asp?querysolution=$solution&querylastbackuptime=$lastbackuptime"
write-host $surl
write-host $lastbackuptime

これを実行したときの出力は次のとおりです

https://REDACTED:1338/REDACTED.asp?querysolution=Windows Server Backup&querylastbackuptime=05/07/2013 05:04:12
07/05/2013 05:04:12

別の変数の一部として作成されたときにpowershellが日付を交換するのに、変数を単独で出力したときにそうでないのはなぜですか?!

4

2 に答える 2

3

datetimeこれは、オブジェクトをキャストする特殊なケースです。を使用して日付を文字列として単純に出力するとwrite-host、それは running と同じになります$lastbackuptime.toString()。この方法では、コンピュータの文化を使用します。私の場合、Windows の地域設定のカルチャはノルウェーであるため、「ヨーロッパ」の dateformat: を取得しますdd/mm/yyyy

ただし、$lastbackuptime文字列内に含めると、オブジェクトへのキャストが実行されstringます。PowerShell (または .Net) では、日時オブジェクトをキャストするときに、標準形式を使用して文字列に変換し、コンピューターが構成されているカルチャに関係なくコードが同じように実行されるようにすることが決定されました。そのため、キャストでは米国の形式が提供されtoString()Write-Hostでは「ヨーロッパ」の形式が提供されます。

元:

[16:07:43] PS-ADMIN C:\> $d.tostring()
07.05.2013 16:04:17
[16:13:05] PS-ADMIN C:\> write-host $d
07.05.2013 16:04:17
[16:13:12] PS-ADMIN C:\> [string]$d
05/07/2013 16:04:17

日時を表示する形式を指定するには、次のようにします。

[16:14:28] PS-ADMIN C:\> $d.tostring("dd/MM/yyyy")
07.05.2013
[16:14:34] PS-ADMIN C:\> "examplestring $($d.tostring("dd/MM/yyyy"))"
examplestring 07.05.2013

詳細はこちら

于 2013-05-07T14:15:41.233 に答える
0

地域の設定、特に短い日付と長い日付の形式を確認してください。

私のシステムでは、Short Date はMM/dd/yyyyで、Long Date はdddd, MMMM dd,yyyyです。次に、例の簡略化されたバージョンを実行します。

>$lastbackuptime = get-date;
>$lastbackuptime

Tuesday, May 07, 2013 10:07:42


>$url="http://whatever/redacted.asp?time=$lastbackuptime";
>$url
http://whatever/redacted.asp?time=05/07/2013 10:07:42

単独で使用すると、日付を返す際に長い日付形式が使用されますが、別の文字列と連結する (または内部で展開する) と、短い日付形式が使用されます。

于 2013-05-07T14:13:43.500 に答える