我正在尝试通过另一个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的内部文本缓冲区宽度有关。我尝试了其他的out-file方法,比如[System.IO.StreamWriter],但是它们看起来都是一样的 - 包裹并限制在每行一定的宽度。
请帮帮我,谢谢!
这件事的全部目的是自动生成一些脚本,并在其他机器上远程执行这些创建的脚本。
答案 0 :(得分:2)
将-Width参数与Out-File cmdlet一起使用,如下所示:
Out-File -FilePath "c:\test.ps1" -Width 4096
答案 1 :(得分:0)
该变量不会在单引号中展开。可能你需要这样的样本:
$scripts=@'
$date=get-date
"Hello,now is $date"
'@
$scripts | Out-File second.ps1
./second.ps1
输出是:
Hello,now is 09/23/2013 23:41:18