2013-09-23 51 views
2

我想通過另一個PowerShell腳本創建PowerShell腳本。我有類似: >當試圖將scriptblock寫入文件時,PowerShell scriptBlock包裝腳本

$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日誌文件=」 %TEMP%\ AT $($ Dict.Get_Item(「PRODUCT_NAME」))V8.4.log「altsource =」C:\ temp \ baf \ mediafile「

但是,當我有一些長的單行腳本就像上面顯示的那樣,它會自動包裝,所以輸出.ps1文件不起作用,就像我直接從父script調用腳本一樣PT。 因此,在父的.ps1腳本創建的名爲.ps1文件,代碼則是這樣的:

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

如果運行它,將無法正常運行。

那麼是否有人知道如何將文本格式的scriptblocks,以便他們可以正確地寫入另一個子腳本文件進一步執行? 我做了一些研究,我認爲它可能與PS的內部文本緩衝區寬度有關。我嘗試了其他的out-file方法,就像[System.IO.StreamWriter]一樣,但是它們看起來都是一樣的 - 包裝並限制爲每行一定的寬度。

請幫幫我,謝謝!

這件事的全部目的是自動生成一些腳本,並在其他機器上遠程執行這些創建的腳本。

+0

您是否嘗試過使用Out-File命令使用-Width運算符? –

+0

@Musaab謝謝!我試過了,它工作。此外,這個寬度在什麼單位?字符數?字節? – FrozenLand

+0

我會作爲答案張貼,我很感激你是否可以選擇它作爲正確的答案。至於寬度運算符,是的,這是你可以在這裏看到的字符數:http://technet.microsoft.com/en-us/library/hh849882.aspx –

回答

2

使用-Width參數和OUT-文件cmdlet的如下:

Out-File -FilePath "c:\test.ps1" -Width 4096 
+0

這是否有上限? 4096是一個安全值作爲參數的寬度?我沒有瘋狂的代碼,但我想確保500字符長的行可以適合。 – FrozenLand

+0

好問題,但我不太確定上限是多少。 要確保總是給出正確的數字,您可以將寬度大小設置爲腳本塊字符的長度,如下所示:-Width $ ScriptBlock.ToString()。長度 –

+0

寬度與長度不一樣吧?我的腳本塊的每一行可能會很長,但我知道它們不會超過至多1000年。但是整個塊可能無限長,所以我希望寬度與長度無關。 – FrozenLand

0

該變量不會在單引號中展開。可能是你需要一個這樣的例子:

[email protected]' 
$date=get-date 
"Hello,now is $date" 
'@ 

$scripts | Out-File second.ps1 
./second.ps1 

輸出是:

Hello,now is 09/23/2013 23:41:18 
+0

謝謝。然而,我在這裏遇到的問題是,當我有這樣的東西:> dostuff.exe -option1 sss -option2 sss ....一路option99(只是一個例子),如果每個選項和它的參數是相對較長的佔用內部行緩衝區的長度,那麼生成的.ps1文件中的所有選項都將寫入單獨的行,從而使腳本無法執行。 – FrozenLand