多くのサーバーに対してPowerShellスクリプトを実行していますが、出力をテキストファイルに記録しています。
スクリプトが現在実行されているサーバーをキャプチャしたいと思います。これまでのところ:
$file = "\\server\share\file.txt"
$computername = $env:computername
$computername | Add-Content -Path $file
この最後の行は、出力ファイルに疑問符を追加します。おっと。
PowerShellでテキストファイルに変数を出力するにはどうすればよいですか?
試行錯誤の後、私はそれを見つけました
$computername = $env:computername
コンピューター名を取得するために機能しますが、 Add-Content を介して$computername
をファイルに送信することは機能しません。
$computername.Value
も試しました。
代わりに、私が使用する場合
$computername = get-content env:computername
を使用してテキストファイルに送信できます
$computername | Out-File $file
最も単純なHello Worldの例...
$hello = "Hello World"
$hello | Out-File c:\debug.txt
サンプルコードは問題ないようです。したがって、根本的な問題をどうにか掘り起こす必要があります。スクリプトのタイプミスの可能性を排除しましょう。まず、スクリプトの先頭に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