[玩转系统] 使用 PowerShell 的灵活 SCCM 任务序列
作者:精品下载站 日期:2024-12-14 08:08:04 浏览:14 分类:玩电脑
使用 PowerShell 的灵活 SCCM 任务序列
下面通过一个实际例子来说明这一点。 相应的任务序列应用于大约。 350 个应用程序,因此每次更改(应用程序 A 输入、应用程序 B 输出、应用程序 C 输出……)都需要相应的手动操作。 可以通过使用 Powershell 进行更改来自动化该过程。银行业的一个主要客户通过 ScriptRunner 实现了这一点。
为此,创建了一个任务序列模板,其中包含从不或很少更改的所有步骤(任务序列变量、.NET 安装程序、补丁等)。该模板是从脚本中复制的,并且该副本填充了要使用的完整的新发布数据。在这种特定情况下,发布数据包含在包含所有应用程序参数的文本文件中,并且已从 SCCM 应用程序模型中提供了正确的名称。
详细脚本
首先加载ConfigMgr Powershell模块:
Import modules ($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5) + ‘ConfigurationManager.psd1’)
以下PowerShell函数用于复制现有序列、模板:
function duplicate_tasksequence ($origTSName,$newTSName) {
try{
$ns_root = “ROOTSMSSite_$sitecode”
$origTSPkg = GWMI -ComputerName $siteServer -Namespace $ns_root -Class “SMS_TaskSequencePackage” -Filter “Name=’$origTSName'”” “SMS_TaskSequencePackage”.
# check if template exists
if ($origTSPkg.PackageID -ne “”){
Write-Host “Template FOUND!” -ForegroundColor Green
$methodTSPkgName = “SMS_TaskSequencePackage”
$mc = [WMIClass]”$($ns_root):$($methodTSPkgName)”
$inParamsGet = $mc.psbase.GetMethodParameters(“GetSequence”)
$inParamsGet.TaskSequencePackage = $origTSPkg
$outParamsGet = $mc.psbase.InvokeMethod(“GetSequence”,$inparamsGet,$null)
$newTS = $outParamsGet.TaskSequence
$newTSPkg = ([WMIClass]”$($ns_root):$($methodTSPkgName)”).CreateInstance()
$newTSPkgID = $newTSPkg.PackageID
$newTSPkg = $origTSPkg
$newTSPkg.name = $newTSName
$newTSPkg.PackageID = $newTSPkgID
$inParamsSet = $mc.psbase.GetMethodParameters(“SetSequence”)
-==- proudly presents
$inParamsSet.TaskSequencePackage = $newTSPkg
$outParamsSet = $mc.psbase.InvokeMethod(“SetSequence”,$inParamsSet,$null)
$ntsPkg = GWMI -ComputerName $siteServer -Namespace $ns_root -Class “SMS_TaskSequencePackage” | where { $outParamsSet.SavedTaskSequencePackagePath.Contains($_.PackageID)}
return $ntsPkg.PackageID
}
else{
return “”
}
}
catch{
return $null;
}
}
来源科技网
调用该函数会根据模板创建一个新的任务序列:
$newSequence = duplicate_tasksequence "$TSTemplate" "$TargetTS"
然后通过 Get-CMTaskSequenz 加载新序列的对象以进行编辑:
$CMTS = Get-CMTaskSequence -Name $TargetTS
注意:序列中的所有步骤都必须作为 IResultObject 添加或返回。
现在可以使用 GetSequence 方法来编辑任务序列:
$Parameters = New-Object “System.Collections.Generic.Dictionary[string, object]”
$Parameters.Add(“TaskSequencePackage”,$CMTS)
$TSmethod =$CMTS.ConnectionManager.ExecuteMethod(“SMS_TaskSequencePackage”, “GetSequence”, $Parameters)
$TaskSequence = $TSmethod.GetSingleItem(“TaskSequence”)
现在我们在 $TaskSequence 变量 中拥有有关 ConnectionManager-Property 的序列,可以使用该序列添加步骤。
我们通过已使用的连接管理器将要添加的新步骤定义为“安装应用程序操作”:
$newStep = $CMTS.ConnectionManager.CreateEmbeddedObjectInstance("SMS_TaskSequence_InstallApplicationAction")
foreach ($app in $Applications){
$appName= (Get-CMApplication -Name $app)
$newStep.Name = “$app”
$newStep.ApplicationName = $appName.ModelName
if( $appName.LocalizedDisplayName -eq $null){ #Error Handling - If App is not available in SCCM Site -> EXIT
Write-Host “NOT FOUND: $app — PLEASE ADD THE APPLICATION TO SCCM SITE $SiteCode” -ForegroundColor Red
Exit
}
$appName 是与文本文件中的名称匹配的实际应用程序。 “安装应用程序”步骤也给出了应用程序的名称。
注意:此处必须小心,因为 GUI 只能为步骤名称分配 40 个字符,但 Powershell 脚本在此没有限制。较长的名称不会导致序列停止工作,但稍后无法在 GUI 中进行编辑。
要选择要添加到步骤的应用程序,我们需要唯一的应用程序 ID (ScopeID)。它位于 ModelName 对象中。
现在已经描述了该步骤的主要部分:
- 类型已定义 (SMS_TaskSequence_InstallApplicationAction)
- 名称已定义($app,即文本文件中的名称)
- 该应用程序是使用 ScopeID 定义的。
该步骤有更多对象和选项,为清楚起见,此处未使用这些对象和选项。
一个非常有趣的选项肯定是ContinueOnErrorWith
SCCM 中的 $newStep.ContinueOnError=“true ” 行将设置“错误继续”处的复选标记。然而,当在“For-Each”循环中使用时,这将适用于每个步骤——这在生产序列中有点不吸引人或不受欢迎。
创建许多步骤后,它们将存储在生成的数组中并分配给任务序列组。在示例中,该组称为“应用程序”。
为此,只需使用其序列号对组进行寻址(从 0 开始,其中 0 表示没有组):
$TaskSequenceSteps = $TaskSequence.GetArrayItems(“Steps”)
$TaskSequenceSteps = $TaskSequence.GetArrayItems(“Steps”)
$GroupSteps = $TaskSequenceSteps[1].GetArrayItems(“Steps”)
$GroupSteps.Add($newStep);
# Write array into sequence
$TaskSequenceSteps[1].SetArrayItems(“Steps”, $GroupSteps);
$TaskSequence.SetArrayItems(“Steps”, $taskSequenceSteps);
}
因此,您选择组 1 并将数组中的步骤添加到该组。
现在必须保存或写回任务序列。这与“打开”序列的方式相同:
$Parameters = New-Object “System.Collections.Generic.Dictionary[string, object]”
$Parameters.Add(“TaskSequence”, $TaskSequence)
$Parameters.Add(“TaskSequencePackage”, $CMTS)
$TSmethod = $CMTS.ConnectionManager.ExecuteMethod(“SMS_TaskSequencePackage”,”SetSequence”, $Parameters)
脚本之前的模板
脚本之前的模板
脚本之后的新序列
脚本后的新序列
使用 ScriptRunner 连接器扩展 ScriptRunner,并集成您的监控、IT 服务管理、票证、权限管理系统等,以在您的 IT 运营中创建完全自动化的控制循环。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag