【问题标题】:Run SysPrep remotely through commands from Azure powershell通过 Azure powershell 中的命令远程运行 SysPrep
【发布时间】:2019-02-08 04:41:13
【问题描述】:

我想通过 powershell 运行一些命令来远程执行 Sysprep。

所以我首先使用这个创建了一个会话:

$UserName = "IPAddress\username"
$Password = ConvertTo-SecureString "password" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($UserName, $Password)
$s = New-PSSession -ComputerName IPAddress -Credential $psCred

然后分配 Sysprep 中使用的变量:

$sysprep = 'C:\Windows\System32\Sysprep\Sysprep.exe'
$arg = '/generalize /oobe /shutdown /quiet'
$sysprep += " $arg"

然后最后运行这个:

Invoke-Command -Session $s -ScriptBlock {$sysprep}

当我运行最后一个命令时,实际上什么都没有发生。但是在脚本块中,而不是$sysprep,如果我给出任何其他命令,如启动/停止服务,它会给出一些响应。但是 SysPrep 命令似乎不起作用。谁能指出我做错了什么。

【问题讨论】:

  • 如果使用SysPrep泛化VM,那么VM将关闭,无法使用。它变成了一个广义的图像。
  • @CharlesXu-MSFT,是的。我需要概括 Vm 并创建它的图像。
  • 我认为您可以使用 vm 扩展来执行 SysPrep。然后关注这个link
  • @CharlesXu-MSFT ,是的,这是我关注的链接。但我想要脚本中的所有内容。

标签: azure powershell command azure-virtual-machine sysprep


【解决方案1】:

$sysprep 是一个字符串 时,您正试图调用scriptblock 对象 来运行。为此,您需要使用 Start-Process cmdlet。像这样:

$sysprep = 'C:\Windows\System32\Sysprep\Sysprep.exe'
$arg = '/generalize /oobe /shutdown /quiet'
Invoke-Command -Session $s -ScriptBlock {param($sysprep,$arg) Start-Process -FilePath $sysprep -ArgumentList $arg} -ArgumentList $sysprep,$arg

【讨论】:

  • 感谢您的回复。但是当我运行这个时,它给出了以下错误:“无法验证参数'FilePath'的参数。参数为空或空。提供一个不为空或空的参数,然后再次尝试该命令。”。我只运行了 $sysprep ,它提供了价值。但不知何故,它无法在整个命令中获取该值。
  • 我的错。我忘了包含脚本块的参数。我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多