【发布时间】:2020-01-30 00:18:51
【问题描述】:
我已经研究了几天的 Powershell 脚本来自动化 SCCM 应用程序的非常繁琐的创建过程,但我遇到了一个我还没有找到答案的问题。
这是我目前所拥有的:
Import-Module $env:SMS_ADMIN_UI_PATH.Replace("\bin\i386", "\bin\configurationmanager.psd1")
$deployTypeHash = @{
applicationName = "TestApp"
deploymentTypeName = "TestApp"
ContentLocation = "\\A\Network\Path"
InstallCommand = "Install Command"
UninstallCommand = "Uninstall Command"
ScriptLanguage = 'PowerShell'
InstallationBehaviorType = 'InstallForSystem'
LogonRequirementType = 'WhetherOrNotUserLoggedOn'
UserInteractionMode = 'Hidden'
MaximumRuntimeMins = 120
EstimatedRuntimeMins = 20
AddDetectionClause = ""
ValueName = "UninstallString"
}
$cla1 = New-CMDetectionClauseRegistryKeyValue -Hive LocalMachine `
-Is64Bit `
-KeyName "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\!$($configCM.application.name)" `
-Existence `
-PropertyType String `
-ValueName $($deployTypeHash.ValueName)
$logical1 = $cla1.Setting.LogicalName
#COMMENT### $cla1.Connector = 'Or'
$cla2 = New-CMDetectionClauseRegistryKeyValue -Hive LocalMachine `
-Is64Bit `
-KeyName "SOFTWARE\WOW6432\Microsoft\Windows\CurrentVersion\Uninstall\!$($configCM.application.name)" `
-Existence `
-PropertyType String `
-ValueName "UninstallString"
$logical2 = $cla1.Setting.LogicalName
#COMMENT### $cla2.Connector = 'Or'
Add-CMScriptDeploymentType -ContentLocation $($deployTypeHash.ContentLocation) `
-DeploymentTypeName $($deployTypeHash.deploymentTypeName) `
-InstallCommand $($deployTypeHash.InstallCommand) `
-AddDetectionClause @($cla1, $cla2) `
-GroupDetectionClauses @($logical1, $logical2) `
-ApplicationName $($deployTypeHash.applicationName) `
-UninstallCommand $($deployTypeHash.UninstallCommand) `
-InstallationBehaviorType $($deployTypeHash.InstallationBehaviorType) `
-LogonRequirementType $($deployTypeHash.LogonRequirementType) `
-MaximumRuntimeMins $($deployTypeHash.MaximumRuntimeMins) `
-UserInteractionMode $($deployTypeHash.UserInteractionMode) `
-SlowNetworkDeploymentMode Download | Out-Null
我希望能够更改用于比较部署类型连接器中的注册表项的逻辑表达式的值(从“与”到“或”),但到目前为止,我的任何尝试都没有使用这个方法(在评论中)。
任何人都知道如何做到这一点或更好的方法来做到这一点?
谢谢
【问题讨论】:
-
您使用的是哪个版本的 sccm?这应该可以从 1810 开始(参见 configurationmanager.uservoice.com/forums/300492-ideas/…)
-
版本 1902。感谢您的回复,我使用的是“Add-CMScriptDeploymentType”而不是“Add-CMMsiDeploymentType”。 Add-CMScriptDeploymentType cmdlet 似乎没有 Adam Meltzer 在 cmdlet 的 Microsoft 文档中所说的 DetectionClauseConnector。[链接]docs.microsoft.com/en-us/powershell/module/configurationmanager/…
-
我自己没有检查它,但用户语音请求实际上是针对脚本部署类型的,所以我认为它是为两者实现的,他只是没有为两者发布和示例。请注意,msi 类型的页面也没有提到 detectionclauseconnector 参数(docs.microsoft.com/en-us/powershell/module/configurationmanager/…),但如果我直接检查我的 cmdlet,我会得到 3 个支持它的参数集(另请参阅:docs.microsoft.com/en-us/powershell/sccm/…)所以它应该真的可以工作跨度>
-
上述语法显然不起作用。我得到一个 > 错误信息。
-
我认为 Adam Melzer 搞错了 -DetectionClauseConnector {LogicalName=$logic2;Connector="or"},{LogicalName=$logic3;Connector="or"} 应该是 -DetectionClauseConnector @{LogicalName =$logic2;Connector="or"},@{LogicalName=$logic3;Connector="or"}。如果它仍然不起作用(我也不确定他为什么会在组中使用 1 和 2,但在连接器中使用 2 和 3)我明天会自己尝试我只是今天没有时间。如果可行,我会将其重写为一个干净的答案
标签: powershell sccm configurationmanager