Da es div. Leute im i-net gibt die dafür eine Lösung suchen - und ich bis heute Nachmittag das selbe Problem hatte - hier die Lösung:
Insofern man versucht über WinRM / Remote Powershell auf Befehle des SCCM2012 zuzugreifen, kann es passieren das die das passende PS-Drive nicht geladen wird
Das liegt daran das beim Laden der SCCM2012-Module in der Powershell
Insofern nun der Benutzer mit welchem der Befehl ausgeführt wird niemals die SCCM2012 Console auf dem Server auf welchem der Befehl ausgeführt wird gestartet hat, existieren die Informationen in der Registry nicht. Lösung wäre also den Benutzer die Console auf dem Server ausführen zu lassen (finde ich aber persönlich sehr unschön ;D )
Alternativ erstellen wir einfach die benötigten Registry-Keys.
Bei der Verbindung zu einem Computer per WinRM wird automatisch ein Profil auf dem Rechner angelegt, somit existiert auch der passende Reg-Hive HKCU:
nun muss das Script ConfigurationManager.psd1 welches oben bereits beispielhaft geladen wurde angepasst werden. Das Original Script ist mit einem Zertifikat versehen, das man diesem Zertifikat vertraut müsste man beim ersten Aufruf bestätigen (Dies erscheint jedoch beim Ausführen über WinRM nicht).
Daher löschen wir das Zertifikat aus der psd1:
Als nächstes habe ich mir ein kleines Powershell-Script erstellt welches ich zwischen dem Verminden per WinRM und dem Laden der SCCM2012 Module aufrufe:
Achtung: die Roten Eigenschaften müssen an die eigene Umgebung angepasst werden, die passenden Werte einfach aus der Registry eines Benutzers auslesen welcher die ConfigMgr Console schon einmal gestartet hat.
zusammengefasst noch mal mein Aufruf mit dem ich eine Verbindung zum SCCM-Server herstellt um im Anschluss beliebige ConfigMgr-CMDlets auszuführen:
Insofern man versucht über WinRM / Remote Powershell auf Befehle des SCCM2012 zuzugreifen, kann es passieren das die das passende PS-Drive nicht geladen wird
cd / set-location sitename:
cd : Cannot find drive. A drive with the name 'sitename' does not exist.
+ CategoryInfo : ObjectNotFound: (sitename:String) [Set-Location], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SetLocationCommand
Das liegt daran das beim Laden der SCCM2012-Module in der Powershell
eigentlich aus einem Reg-Key ausgelesen wird wie der SCCM2012-Server heißt und welchen Site-Code die zu administrierende Site hat.import-module ($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5) + '\ConfigurationManager.psd1')
Insofern nun der Benutzer mit welchem der Befehl ausgeführt wird niemals die SCCM2012 Console auf dem Server auf welchem der Befehl ausgeführt wird gestartet hat, existieren die Informationen in der Registry nicht. Lösung wäre also den Benutzer die Console auf dem Server ausführen zu lassen (finde ich aber persönlich sehr unschön ;D )
Alternativ erstellen wir einfach die benötigten Registry-Keys.
Bei der Verbindung zu einem Computer per WinRM wird automatisch ein Profil auf dem Rechner angelegt, somit existiert auch der passende Reg-Hive HKCU:
Enter-PSSession -Computername Hostname
nun muss das Script ConfigurationManager.psd1 welches oben bereits beispielhaft geladen wurde angepasst werden. Das Original Script ist mit einem Zertifikat versehen, das man diesem Zertifikat vertraut müsste man beim ersten Aufruf bestätigen (Dies erscheint jedoch beim Ausführen über WinRM nicht).
Daher löschen wir das Zertifikat aus der psd1:
@{NestedModules = @(
# C# Snap-Ins
"AdminUI.PS.Provider.dll",
"AdminUI.PS.HS.dll",
"AdminUI.PS.Rba.dll",
"AdminUI.PS.AppModel.dll",
"AdminUI.PS.Deployments.dll",
"AdminUI.PS.AssetIntelligence.dll",
"AdminUI.PS.Alerts.dll",
"AdminUI.PS.EP.dll",
"AdminUI.PS.AppMan.dll",
"AdminUI.PS.Sum.dll",
"AdminUI.PS.Content.dll",
"AdminUI.PS.Osd.dll",
"AdminUI.PS.Certificates.dll",
"AdminUI.PS.ClientStatus.dll",
"AdminUI.PS.ClientOperations.dll",
"AdminUI.PS.ClientSettings.dll",
"AdminUI.PS.Collections.dll",
"AdminUI.PS.Oob.dll",
"AdminUI.PS.SystemStatus.dll",
"AdminUI.PS.Dcm.dll",
"AdminUI.PS.Migration.dll",
"AdminUI.PS.DatabaseReplication.dll",
"AdminUI.PS.Accounts.dll",
"AdminUI.PS.CalTracking.dll",
"AdminUI.PS.Common.dll",
"AdminUI.PS.TypeAdapter.dll"
"AdminUI.PS.Reporting.dll"
)
#Required assemblies for type adapter
RequiredAssemblies= @("AdminUI.PS.TypeAdapter.dll",
"Microsoft.ConfigurationManagement.ManagementProvider.dll",
"AdminUI.WqlQueryEngine.dll")
# Location from which to download updateable help
HelpInfoURI = 'http://go.microsoft.com/fwlink/?LinkId=301426'
# This GUID is used to uniquely identify this module.
GUID = '7F590131-5253-4425-8B32-EEAB51A4C393'
# The minimum version of PowerShell needed to use this module.
PowerShellVersion = '3.0'
# The CLR version required to use this module.
CLRVersion = '4.0'
# The types files (.ps1xml) loaded by this module.
TypesToProcess = @("Microsoft.ConfigurationManagement.PowerShell.Types.ps1xml", "CalTracking.Types.ps1xml")
# The format files (.ps1xml) loaded by this module.
FormatsToProcess = 'CalTracking.format.ps1xml'
# Lists additional items like icons, etc. that the module will use.
FileList = @("AdminUI.PS.Misc.dll-Help.xml",
"AdminUI.PS.Provider.dll-Help.xml",
"AdminUI.PS.HS.dll-Help.xml",
"AdminUI.PS.Rba.dll-Help.xml",
"AdminUI.PS.AppModel.dll-Help.xml",
"AdminUI.PS.Deployments.dll-Help.xml",
"AdminUI.PS.AssetIntelligence.dll-Help.xml",
"AdminUI.PS.Alerts.dll-Help.xml",
"AdminUI.PS.EP.dll-Help.xml",
"AdminUI.PS.AppMan.dll-Help.xml",
"AdminUI.PS.Sum.dll-Help.xml",
"AdminUI.PS.Content.dll-Help.xml",
"AdminUI.PS.Osd.dll-Help.xml",
"AdminUI.PS.Certificates.dll-Help.xml",
"AdminUI.PS.ClientStatus.dll-Help.xml",
"AdminUI.PS.ClientOperations.dll-Help.xml",
"AdminUI.PS.ClientSettings.dll-Help.xml",
"AdminUI.PS.Collections.dll-Help.xml",
"AdminUI.PS.Oob.dll-Help.xml",
"AdminUI.PS.SystemStatus.dll-Help.xml",
"AdminUI.PS.Dcm.dll-Help.xml",
"AdminUI.PS.Migration.dll-Help.xml",
"AdminUI.PS.DatabaseReplication.dll-Help.xml",
"AdminUI.PS.Accounts.dll-Help.xml",
"AdminUI.PS.CalTracking.dll-Help.xml",
"AdminUI.PS.Common.dll-Help.xml",
"AdminUI.PS.TypeAdapter.dll-Help.xml"
"AdminUI.PS.Reporting.dll-Help.xml"
)
# The author of this module.
Author = 'Microsoft Corporation'
# The company or vendor for this module.
CompanyName = 'Microsoft Corporation'
# The copyright statement for this module.
Copyright = '(c) Microsoft Corporation. All rights reserved.'
# The version of this module.
ModuleVersion = '5.00.7958.1000'
}
Als nächstes habe ich mir ein kleines Powershell-Script erstellt welches ich zwischen dem Verminden per WinRM und dem Laden der SCCM2012 Module aufrufe:
# Function From Carbon PowerShell Modulefunction Test-RegistryKeyValue
{
<#
.SYNOPSIS
Tests if a registry value exists.
.DESCRIPTION
The usual ways for checking if a registry value exists don't handle when a value simply has an empty or null value. This function actually checks if a key has a value with a given name.
.EXAMPLE
Test-RegistryKeyValue -Path 'hklm:\Software\Carbon\Test' -Name 'Title'
Returns `True` if `hklm:\Software\Carbon\Test` contains a value named 'Title'. `False` otherwise.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]
# The path to the registry key where the value should be set. Will be created if it doesn't exist.
$Path,
[Parameter(Mandatory=$true)]
[string]
# The name of the value being set.
$Name
)
if( -not (Test-Path -Path $Path -PathType Container) )
{
return $false
}
$properties = Get-ItemProperty -Path $Path
if( -not $properties )
{
return $false
}
$member = Get-Member -InputObject $properties -Name $Name
if( $member )
{
return $true
}
else
{
return $false
}
}
if (Test-RegistryKeyValue -Path HKCU:\Software\Microsoft\ConfigMgr10\AdminUI\MRU\1 -Name SiteCode) {} else {
New-Item -path HKCU:\Software\Microsoft -Name ConfigMgr10
New-Item -path HKCU:\Software\Microsoft\ConfigMgr10 -Name AdminUI
New-Item -path HKCU:\Software\Microsoft\ConfigMgr10\AdminUI -Name MRU
New-Item -path HKCU:\Software\Microsoft\ConfigMgr10\AdminUI\MRU -Name 1
New-ItemProperty -path HKCU:\Software\Microsoft\ConfigMgr10\AdminUI\MRU\1 -Name ServerName -Value Server
New-ItemProperty -path HKCU:\Software\Microsoft\ConfigMgr10\AdminUI\MRU\1 -Name SiteCode -Value SiteCode
New-ItemProperty -path HKCU:\Software\Microsoft\ConfigMgr10\AdminUI\MRU\1 -Name SiteName -Value "Name der Site"
New-ItemProperty -path HKCU:\Software\Microsoft\ConfigMgr10\AdminUI\MRU\1 -Name SecurityType -Value 0 -PropertyType "DWord"
}
Achtung: die Roten Eigenschaften müssen an die eigene Umgebung angepasst werden, die passenden Werte einfach aus der Registry eines Benutzers auslesen welcher die ConfigMgr Console schon einmal gestartet hat.
zusammengefasst noch mal mein Aufruf mit dem ich eine Verbindung zum SCCM-Server herstellt um im Anschluss beliebige ConfigMgr-CMDlets auszuführen:
Enter-PSSession -Computername Hostname
.\sccm_regkey.ps1 | Out-Null
import-module ($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5) + '\ConfigurationManager.psd1')
cd $Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5)
CD WK1:
Zuletzt bearbeitet: