我正在尝试创建一个脚本,将计算机对象添加到SCCM。长话短说,我不能使用在SCCM模块中找到的cmdlet,因为我需要调用命令,以便可以使用不同的凭据。
我这辈子都弄不清楚在哪里指定要使用的凭据,甚至不知道是否可能。下面是我如何做到这一点的几个例子。
$CSVLocation = #Combo box item, will fill in later
$CSVImport = Import-Csv $CSVLocation
#Initialize connection to the SCCM 2012 Environment
$ScopeOptions = $Null
$Scope = New-Object System.Management.ManagementScope -ArgumentList "\$SiteServerrootsmssite_$SiteCode",$ScopeOptions
$Null = $Scope.Connect()
$Site = New-Object System.Management.ManagementClass -ArgumentList $Scope,'SMS_Site',$Null
foreach ($Computer in $CSVImport)
{
if ($Computer.MAC)
{
$MethodName = 'ImportMachineEntry'
$InParams = $Site.GetMethodParameters($MethodName)
$InParams.MACAddress = $Computer.Mac
$InParams.NetbiosName = $Computer.Name
$InParams.OverwriteExistingRecord = $true
$CMComputer = $Site.InvokeMethod($MethodName, $InParams, $Null)
}
elseif ($Computer.GUID)
{
$MethodName = 'ImportMachineEntry'
$InParams = $Site.GetMethodParameters($MethodName)
$InParams.SMBIOSGUID = $Computer.GUID
$InParams.NetbiosName = $Computer.Name
$InParams.OverwriteExistingRecord = $true
$CMComputer = $Site.InvokeMethod($MethodName, $InParams, $Null)
}
}
上面的语法是我喜欢做的,对我来说似乎更干净。我也一直在玩下面的方法,通过mac地址导入工作。还不确定GUID的位置参数。
Invoke-WmiMethod -Credential $Credential -Namespace root/SMS/site_$($SiteCode) -Class SMS_Site -Name ImportMachineEntry -ArgumentList @($null, $null, $null, $null, $null, $null, $Computer.mac, $null, $Computer.name, $True, $null, $null) -ComputerName $SiteServer
最坏的情况下,我将使用第二个代码片段来做我需要的事情。只是希望有人能确认我是否可以通过第一种方法提供凭据,如果是这样,在哪里以及如何?
对于第一个方法:
如果要使用凭据,则需要在建立连接时使用。例如:
$Scope = new-object system.management.managementscope
$Scope.path = "\$SiteServerrootsmssite_$SiteCode"
$options = $Scope.Options
$Options.Username = 'domainuser'
$Options.Password = 'Password'
上面将密码存储为明文,这是非常危险的,例如。
第二个方法:
BIOS Guid的位置如下:(11111111-1111-1111-1111-1111111111是你的BIOS Guid)
-ArgumentList @($null, $null, $null, $null, $null, $null, $Computer.mac, $null, $Computer.name, $True,'11111111-1111-1111-1111-111111111111', $null)