web-dev-qa-db-ja.com

テキストファイルへの変数の出力(「エコー」)

多くのサーバーに対してPowerShellスクリプトを実行していますが、出力をテキストファイルに記録しています。

スクリプトが現在実行されているサーバーをキャプチャしたいと思います。これまでのところ:

$file = "\\server\share\file.txt"
$computername = $env:computername

$computername | Add-Content -Path $file

この最後の行は、出力ファイルに疑問符を追加します。おっと。

PowerShellでテキストファイルに変数を出力するにはどうすればよいですか?

34
jcarpio

試行錯誤の後、私はそれを見つけました

$computername = $env:computername

コンピューター名を取得するために機能しますが、 Add-Content を介して$computernameをファイルに送信することは機能しません。

$computername.Valueも試しました。

代わりに、私が使用する場合

$computername = get-content env:computername

を使用してテキストファイルに送信できます

$computername | Out-File $file
9
jcarpio

最も単純なHello Worldの例...

$hello = "Hello World"
$hello | Out-File c:\debug.txt
55
bigtv

サンプルコードは問題ないようです。したがって、根本的な問題をどうにか掘り起こす必要があります。スクリプトのタイプミスの可能性を排除しましょう。まず、スクリプトの先頭にSet-Strictmode -Version 2.0を必ず配置してください。これは、変数名のスペルミスを見つけるのに役立ちます。そのようです、

# Test.ps1
set-strictmode -version 2.0 # Comment this line and no error will be reported.
$foo = "bar"
set-content -path ./test.txt -value $fo # Error! Should be "$foo"

PS C:\temp> .\test.ps1
The variable '$fo' cannot be retrieved because it has not been set.
At C:\temp\test.ps1:3 char:40
+ set-content -path ./test.txt -value $fo <<<<
    + CategoryInfo          : InvalidOperation: (fo:Token) [], RuntimeException
    + FullyQualifiedErrorId : VariableIsUndefined

疑問符に関する次の部分は、Unicodeに問題があるようです。 Powershellでファイルを入力すると、次のように出力されます。

$file = "\\server\share\file.txt"
cat $file
2
vonPryz