配置规则以使用SCCM中的Powershell检测部署类型的存在
我已经在Powershell脚本上工作了好几天,以自动化非常繁琐的SCCM应用程序创建过程,我遇到了一个问题,我还没有找到答案 以下是我到目前为止的情况:配置规则以使用SCCM中的Powershell检测部署类型的存在,powershell,sccm,configurationmanager,Powershell,Sccm,Configurationmanager,我已经在Powershell脚本上工作了好几天,以自动化非常繁琐的SCCM应用程序创建过程,我遇到了一个问题,我还没有找到答案 以下是我到目前为止的情况: Import-Module $env:SMS_ADMIN_UI_PATH.Replace("\bin\i386", "\bin\configurationmanager.psd1") $deployTypeHash = @{ applicationName = "TestApp" deploymentType
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
我希望能够更改用于比较部署类型连接器中注册表项的逻辑表达式的值(从“And”到“Or”),但使用此方法(在注释中)迄今为止,我的任何尝试都没有成功
有人知道如何做到这一点,或者知道更好的方法吗
谢谢您使用的是哪个版本的sccm?从1810(见)版本1902开始,这应该是可能的。感谢您的回复,我使用的是“添加CMScriptDeploymentType”而不是“添加CMMsiDeploymentType”。Add-CMScriptDeploymentType cmdlet似乎没有Adam Meltzer在cmdlet的Microsoft文档中提到的DetectionClauseConnector。。[link]我没有亲自检查,但uservoice请求实际上是针对脚本部署类型的,所以我假设它是为这两种类型实现的,他只是没有为这两种类型发布和示例。请注意,msi类型的页面也没有提到detectionclauseconnector参数(),但是如果我直接检查cmdlet,我会得到3个支持它的参数集(另请参见:),因此它应该真正起作用。提到的语法显然不起作用。。我收到一条>错误消息。我想Adam Melzer得到了错误的-DetectionClauseConnector{LogicalName=$logic2;Connector=“or”},{LogicalName=$logic3;Connector=“or”}应该是-DetectionClauseConnector@{LogicalName=$logic2;Connector=“or”},@{LogicalName=$logic3;Connector=“or”}。如果它仍然不起作用(我也不知道为什么他会在小组中使用1和2,而在连接器中使用2和3),我明天会自己尝试,我只是今天没有时间。如果它有效,我会把它改写成一个干净的答案
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
$cla2 = New-CMDetectionClauseRegistryKeyValue -Hive LocalMachine `
-Is64Bit `
-KeyName "SOFTWARE\WOW6432\Microsoft\Windows\CurrentVersion\Uninstall\!$($configCM.application.name)" `
-Existence `
-PropertyType String `
-ValueName "UninstallString"
$logical2 = $cla2.Setting.LogicalName
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) `
-DetectionClauseConnector @(@{LogicalName=$logical1;Connector="or"},@{LogicalName=$logical2;Connector="or"}) `
-SlowNetworkDeploymentMode Download | Out-Null