启动进程问题 运行 WsusUtil.exe

Start-Process Issues running WsusUtil.exe

我有一个非常简单的问题,我似乎无法弄清楚...

我有一个 powershell 脚本来更新 WSUS 数据,然后将其导出以便我可以将其刻录到 CD 以用于我们的安全环境,一切都很好,除了 运行ning wsusutil.exe 我得到一个尝试定义参数时出错。

这是原剧本

$nicedate = Get-Date -UFormat %m-%d-%Y

Write-Output("Starting wsusutil...")
Set-Location "C:\Program Files\Update Services\Tools"
Start-Process wsusutil.exe export "E:$nicedate-export.xml.gz" "E:$nicedate-export.log"
Write-Output("wsusutil completed")

但我得到的错误是...

"Start-Process : A positional parameter cannot be found that accepts argument 'E:\Metadata-14-2021-export.xml.gz'."

所以我修改了代码来做到:

Write-Output("Starting wsusutil...")
"C:\Program Files\Update Services\Tools\WsusUtil.exe" export "E:\Metadata$nicedate-export.xml.gz" "E:\Metadata$nicedate-export.log"
Write-Output("wsusutil completed")

但它仍然没有启动该服务。我只需要 运行 在 WsusUtil.exe 上导出并定义日志和 zip 的输出。关于我做错了什么的想法?

注意:经过测试后,我计划将这条线变成 try-catch 以备将来使用。

让我们花点时间回顾一下Start-Process好吗?

帮助页面描述的 Start-Process cmdlet 语法是:

SYNTAX
    Start-Process [-FilePath] <String> [[-ArgumentList] <String[]>] [-Credential <PSCredential>] [-LoadUserProfile]
    [-NoNewWindow] [-PassThru] [-RedirectStandardError <String>] [-RedirectStandardInput <String>]
    [-RedirectStandardOutput <String>] [-UseNewEnvironment] [-Wait] [-WindowStyle {Normal | Hidden | Minimized |
    Maximized}] [-WorkingDirectory <String>] [<CommonParameters>]

    Start-Process [-FilePath] <String> [[-ArgumentList] <String[]>] [-PassThru] [-Verb <String>] [-Wait] [-WindowStyle
    {Normal | Hidden | Minimized | Maximized}] [-WorkingDirectory <String>] [<CommonParameters>]

你是如何 运行你当前的代码正在寻找位置参数来匹配 wsutil.exe 之后的每个空格,即使你需要那些作为参数。要实际使用这些作为参数,请记住使用 -ArgumentList 参数。所以而不是

Start-Process wsusutil.exe export "E:$nicedate-export.xml.gz" "E:$nicedate-export.log"

变成

Start-Process wsusutil.exe -ArgumentList 'export "E:$nicedate-export.xml.gz" "E:$nicedate-export.log"'

或者为了更安全,

Start-Process wsusutil.exe -ArgumentList @('export', '"E:$nicedate-export.xml.gz"', '"E:$nicedate-export.log"')

你的第二次尝试,

Write-Output("Starting wsusutil...")
"C:\Program Files\Update Services\Tools\WsusUtil.exe" export "E:\Metadata$nicedate-export.xml.gz" "E:\Metadata$nicedate-export.log"
Write-Output("wsusutil completed")

试图将 "C:\Program Files\Update Services\Tools\WsusUtil.exe" export "E:\Metadata$nicedate-export.xml.gz" "E:\Metadata$nicedate-export.log" 作为字符串而不是命令来读取。如果我运行

"C:\Program Files\Update Services\Tools\WsusUtil.exe"

在 powershell 中,输出等同于 运行

Write-Output "C:\Program Files\Update Services\Tools\WsusUtil.exe"

如果您尝试从文件路径调用文件,请记住使用调用字符 &

& "C:\Program Files\Update Services\Tools\WsusUtil.exe" export "E:\Metadata$nicedate-export.xml.gz" "E:\Metadata$nicedate-export.log"