2

別の PowerShell スクリプトで PowerShell スクリプトを作成しようとしています。私は次のようなものを持っています: >

    $scriptBlock = {
    write-host "this is the body of the script that I want to add to another PS script"
    if($true){
     write-host "so that I can execute this automatically created script somewhere "
        }
    }
    $scriptBlock | Out-String -Width 4096 | Out-File "c:\test.ps1"

AtRunUnattended.exe "$($Dict.Get_Item("MASTER_DIRECTORY_PATH"))\MEDIA_FILE\" /S /noreboot /L logfile="%TEMP%\AT $($Dict.Get_Item("PRODUCT_NAME")) V8.4. log" altsource="C:\temp\baf\mediafile"

ただし、上記のような長い単一行のスクリプトがある場合は、自動的にラップされるため、親スクリプトから直接スクリプトを呼び出した場合と同様に、出力 .ps1 ファイルが機能しません。したがって、親の .ps1 スクリプトが作成した .ps1 ファイルでは、コードは次のようになります。

ElseIf($str.StartsWith("DRIVER_DATE=")){$str = "DRIVER_DATE=$(Get-Date 
-f MM-dd-yyyy))"}

実行すると正しく実行されません。

スクリプト ブロックをテキスト形式にして、別の子スクリプト ファイルに適切に書き込んでさらに実行できるようにする方法を知っている人はいますか? 私はいくつかの調査を行いましたが、PS の内部テキスト バッファー幅などと関係があるのではないかと思います。[System.IO.StreamWriter] のような他の出力ファイル メソッドも試しましたが、それらはすべて同じように見えます。ラップされ、行ごとに特定の幅に制限されています。

助けてください、ありがとう!

このことの全体的な目的は、いくつかのスクリプトを自動的に生成し、これらの作成されたスクリプトを他のマシンでリモートで実行することです。

4

2 に答える 2

2

次のように、Out-File コマンドレットで -Width パラメーターを使用します。

Out-File -FilePath "c:\test.ps1"  -Width 4096
于 2013-09-23T15:45:07.370 に答える