【发布时间】:2018-09-04 00:13:06
【问题描述】:
我在 WDS 部署后使用 PowerShell 来配置系统。
目前我为每个操作系统和用例都有一个脚本,通过Unattend.xml 文件自动调用。
现在我的问题是,当我想更改一般内容时,我必须在每个脚本中更改它。
所以我想,我应该将它们合并在一起并将模式作为参数传递(例如客户)或从系统中读取它(例如,当我想为一个操作系统版本或制造商运行特定命令时)。
我阅读了很多关于开关 here 的文章,但我不确定这是否是这种情况下的最佳做法。
我将启动定义参数的脚本
Param([string]$customer)
$manufacturer = (Get-CimInstance Win32_ComputerSystem).Manufacturer
$os = (Get-CimInstance Win32_OperatingSystem).version
这是我粘贴在一起的部分脚本:
Write-Output "runnig deskupdate..."
Start-Process "$install\deskupdate\ducmd.exe" -ArgumentList "/WEB /DRV" -NoNewWindow -Wait
Write-Output "installing java..."
Get-ChildItem $install\programs -Filter "jre-*" | ForEach {Start-Process $_.Fullname -ArgumentList "/s" -NoNewWindow -Wait}
Write-Output "installing 7zip..."
Get-ChildItem $install\programs -Filter "7z*" | ForEach {Start-Process $_.Fullname -ArgumentList "/S" -NoNewWindow -Wait}
Write-Output "deactivating uac..."
New-ItemProperty -Path HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system -Name EnableLUA -PropertyType DWord -Value 0 -Force
现在我想把它分开,我可以简单地
- 仅在 fujitsu 系统上运行deskupdate
- 到处安装 7zip
- 不要在客户 shop_a 安装 java
- 仅在客户 shop_a 停用 uac
当然,我可以为每个命令使用一个 if 子句,但我正在寻找一个很好且可维护的解决方案。你会推荐什么?
这是我在这里的第一个问题,请告诉我,我是否表述得足够清楚。 很抱歉拼写和语法错误,我的母语是德语。
【问题讨论】:
标签: powershell deployment switch-statement conditional