PowerShell scriptBlock 在尝试将脚本块写入文件时包装脚本



我正在尝试通过另一个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],但是它们看起来都是一样的 - 包装并限制为每行的一定宽度。

请帮助我,谢谢!

这个东西的全部目的是自动生成一些脚本,并在其他机器上远程执行这些创建的脚本。

将 -Width 参数与输出文件 cmdlet 一起使用,如下所示:

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

变量不会在单引号中扩展。您可能需要这样的示例:

$scripts=@'
$date=get-date
"Hello,now is $date"
'@
$scripts | Out-File second.ps1
./second.ps1 

输出为:

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

相关内容

  • 没有找到相关文章

最新更新