msgDSM7Module.psm1
<#
.SYNOPSIS msg powershell Module fuer die SOAP Schnittstelle fuer Ivanti DSM (Version 7.0 - 2020.2) .DESCRIPTION msg powershell Module fuer die SOAP Schnittstelle fuer Ivanti DSM (Version 7.0 - 2020.2) .NOTES File Name : msgDSM7Module.psm1 Author : Raymond von Wolff, Uwe Franke Version : 1.0.3.1 Requires : PowerShell V5.1 History : https://github.com/uwefranke/msgDSM7Module/blob/master/CHANGELOG.md Help : https://github.com/uwefranke/msgDSM7Module/blob/master/docs/about_msgDSM7Module.md .LINK https://github.com/uwefranke/msgDSM7Module .LINK https://www.powershellgallery.com/packages/msgDSM7Module .LINK https://www.msg-services.de .LINK https://www.ivanti.com #> ############################################################################### # Allgemeine Variablen $DSM7requiredVersion = "7.0" # benoetigte DSM Version 7.0 oder hoeher $DSM7testedVersion = "7.4.4.0" # hoechste getestet DSM Version mit diesem Modul $DSM7Targets = "(|(SchemaTag=Domain)(SchemaTag=OU)(SchemaTag=Computer)(SchemaTag=User)(SchemaTag=CitrixFarm)(SchemaTag=CitrixZone)(SchemaTag=Group)(SchemaTag=ExternalGroup)(SchemaTag=DynamicGroup))" $DSM7Structure = "(|(SchemaTag=Domain)(SchemaTag=OU)(SchemaTag=CitrixFarm)(SchemaTag=CitrixZone)(SchemaTag=Group)(SchemaTag=DynamicGroup)(SchemaTag=SwFolder)(SchemaTag=SwLibrary)(SchemaTag=DynamicSwCategory)(SchemaTag=SwCategory))" $DSM7Container = "(|(SchemaTag=Domain)(SchemaTag=OU)(SchemaTag=CitrixFarm)(SchemaTag=CitrixZone)(SchemaTag=SwFolder)(SchemaTag=SwLibrary)(SchemaTag=DynamicSwCategory)(SchemaTag=SwCategory))" $DSM7StructureComputer = "(|(SchemaTag=Domain)(SchemaTag=OU)(SchemaTag=CitrixFarm)(SchemaTag=CitrixZone)(SchemaTag=Group)(SchemaTag=DynamicGroup))" $DSM7StructureSoftware = "(|(SchemaTag=SwFolder)(SchemaTag=SwLibrary)(SchemaTag=DynamicSwCategory)(SchemaTag=SwCategory))" $global:DSM7GenTypeData = "ModifiedBy,CreatedBy,Modified,Created" $DSM7RegPath = "HKEY_LOCAL_MACHINE\SOFTWARE\NetSupport\NetInstall" $DSM7ExportNCP = "NcpExport.exe" $DSM7ExportNCPXML ="NcpExport.xml" $DSM7NCPfile = "NiCfgSrv.ncp" ############################################################################### # Allgemeine interne Funktionen function Get-PSCredential { [CmdletBinding()] param ($User,$Password) $SecPass = convertto-securestring -asplaintext -string $Password -force $Creds = new-object System.Management.Automation.PSCredential -argumentlist $User,$SecPass return $Creds } ############################################################################### # Allgemeine externe Funktionen function Write-Log { <# .SYNOPSIS eigene Log Funktion .DESCRIPTION eigene Log Funktion .EXAMPLE Write-Log 0 "Text" $MyInvocation.MyCommand .NOTES .LINK Write-Log .LINK Remove-Log #> [CmdletBinding()] param ([int]$typ, [system.String]$message, [system.String]$Name) $typs = @("Info ","Warning","Error ") $dt = Get-Date -format "yyyy-MM-dd HH:mm:ss" $strtyp = $typs[$typ] $global:LogMessage = "[$Name] - $message" $global:LogMessageTyp = $strtyp $LogMessageStr = "$dt - $strtyp - [$Name] - $message" if (!$Ochestrator) { if (!$DSM) { switch ($typ) { 0 {Write-Host $LogMessageStr} 1 {Write-Host $LogMessageStr -ForegroundColor Yellow} 2 {Write-Host $LogMessageStr -ForegroundColor Red} } } else { switch ($typ) { 0 {write-nireport $LogMessage} 1 {write-nireport $LogMessage} 2 {Set-NIError $LogMessage} } } } if ($logfile) { echo $LogMessageStr >> $logfile } } Export-ModuleMember -Function Write-Log function Remove-Log { <# .SYNOPSIS eigene Log Funktion .DESCRIPTION eigene Log Funktion .EXAMPLE Remove-Log -CountLogFiles 10 -DaysLogFilesAge 30 -Logpath "c:\Logs" -Logname "Test" .NOTES .LINK Write-Log .LINK Remove-Log #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.String]$Logpath, [Parameter(Position=1, Mandatory=$true)] [system.String]$Logname, [int]$CountLogFiles = 0, [int]$DaysLogFilesAge = 0 ) $DateLogFiles = (Get-Date).AddDays(-$DaysLogFilesAge) Write-Log 0 "Loesche alle Datei(en), behalte die letzen $CountLogFiles,aelter $DaysLogFilesAge und enthaelt im Namen $Logname befindet sich im Path $Logpath" $MyInvocation.MyCommand try { $filestodelete = Get-ChildItem $logpath -Recurse| Where-Object {$_.Name -like "$Logname*"} if ($DaysLogFilesAge -gt 0) { $filestodelete = $filestodelete| Where-Object {$_.LastWriteTime -lt $DateLogFiles} Write-Log 0 "Loesche $($filestodelete.count) Datei(en) die aelter als $DaysLogFilesAge Tage sind." $MyInvocation.MyCommand $filestodelete |Remove-Item -Force -Verbose $filestodelete = Get-ChildItem $logpath -Recurse| Where-Object {$_.Name -like "$Logname*"} } if ($filestodelete.Count -gt $CountLogFiles -and $CountLogFiles -gt 0) { $filestodelete = $filestodelete|sort LastWriteTime -Descending|select -Last ($filestodelete.Count - $CountLogFiles) Write-Log 0 "Loesche $($filestodelete.count) Datei(en) ueber der Anzahl $CountLogFiles." $MyInvocation.MyCommand $filestodelete |Remove-Item -Force -Verbose } return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } Export-ModuleMember -Function Remove-Log function Convert-ToFilename { param( $filename ) $filename = $filename.Replace("/","_") $filename = $filename.Replace("\","_") $filename = $filename.Replace(";","_") $filename = $filename.Replace(",","_") return $filename } function Test-RegistryValue { param ( [parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()]$Path, [parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()]$Value ) try { Get-ItemProperty -Path $Path | Select-Object -ExpandProperty $Value -ErrorAction Stop | Out-Null Write-Log 0 "Value ($Value) found" $MyInvocation.MyCommand return $true } catch { Write-Log 1 "Value ($Value) not found!" $MyInvocation.MyCommand return $false } } function Remove-Files { <# .SYNOPSIS function to remove files .DESCRIPTION function to remove files .EXAMPLE Remove-Files -CountFiles 10 -DaysFilesAge 30 -Filepath "c:\Logs" -Filename "Test" .NOTES .LINK Remove-Files .LINK Remove-Files #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.String]$Filepath, [Parameter(Position=1, Mandatory=$true)] [system.String]$Filename, [int]$CountFiles = 0, [int]$DaysFilesAge = 0 ) $DateFiles = (Get-Date).AddDays(-$DaysFilesAge) Write-Log 0 "Delete all file(s), keep the last $CountFiles, older then $DaysFilesAge and file name contains ($filename) in path ($Filepath)." $MyInvocation.MyCommand try { $filestodelete = Get-ChildItem $Filepath -Recurse| Where-Object {$_.Name -like "$filename*"} if ($DaysFilesAge -gt 0) { $filestodelete = $filestodelete| Where-Object {$_.LastWriteTime -lt $DateFiles} Write-Log 0 "Delete $($filestodelete.count) file(s), older then $DaysFilesAge day(s)." $MyInvocation.MyCommand $filestodelete |Remove-Item -Force -Verbose:$Verbose $filestodelete = Get-ChildItem $Filepath -Recurse| Where-Object {$_.Name -like "$filename*"} } if ($filestodelete.Count -gt $CountFiles -and $CountFiles -gt 0) { $filestodelete = $filestodelete|Sort-Object LastWriteTime -Descending|select-object -Last ($filestodelete.Count - $CountFiles) Write-Log 0 "Delete $($filestodelete.count) file(s) more then count ($CountFiles)." $MyInvocation.MyCommand $filestodelete |Remove-Item -Force -Verbose:$Verbose } return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function remove-XMLSpecialChar { param ( $file ) $temp = (Get-Content -path $file ) -join "`r" $temp = $temp |foreach { $_ -replace "`n|`r" } # $temp = $temp -replace "[^\u0000-\u007F]+" $temp = $temp -replace "\x04" $temp = $temp -replace "\x05" $temp = $temp -replace "\x06" $temp = $temp -replace "\x1d" $temp = $temp -replace "<\?xml version=`"1.0`" encoding=`"UTF-8`"\?>" , "<?xml version=`"1.0`" encoding=`"UTF-8`"?>`n" Set-Content -path $file -Value $temp -Force $temp = "" return $true } function Get-RegistryValue { param ( [parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()]$Path, [parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()]$Value ) try { $Item = (Get-ItemProperty -Path $Path| Select-Object $Value).$Value Write-Log 0 "Value ($Value): ($Item)" $MyInvocation.MyCommand return $Item } catch { Write-Log 1 "cant read Value ($Value)!" $MyInvocation.MyCommand return $false } } function Convert-StringtoPSRegKey { param ( $KeyPath, [switch]$is32Bit ) $KeyPath = $KeyPath -replace ("HKLM\\","HKLM:\\") $KeyPath = $KeyPath -replace ("HKU\\","HKU:\\") $KeyPath = $KeyPath -replace ("HKEY_LOCAL_MACHINE\\","HKLM:\\") $KeyPath = $KeyPath -replace ("HKEY_USERS\\","HKU:\\") if ($is32Bit -and [Environment]::Is64BitProcess -and $KeyPath -like "HKLM:\\SOFTWARE*") { $KeyPath = $KeyPath -replace ("HKLM:\\\\SOFTWARE","HKLM:\\SOFTWARE\WOW6432Node") } return $KeyPath } function Convert-ArrayToHash { <# .SYNOPSIS konvertiert eine Array zu einem Hash mit Keylist .DESCRIPTION konvertiert eine Array zu einem Hash mit Keylist .EXAMPLE Convert-ArrayToHash Array Key .NOTES .LINK #> [CmdletBinding()] param ( $myArray, $myKey ) $myHash = @{} $myArray | foreach { $myHash[$_.$myKey] = $_ } return $myHash } Export-ModuleMember -Function Convert-ArrayToHash function Confirm-Creds { <# .SYNOPSIS ueberprueft die Benutzerinformationen und ggf. Passwortabfrage .DESCRIPTION ueberprueft die Benutzerinformationen und ggf. Passwortabfrage .EXAMPLE Confirm-Creds -User Benutzer -Password ******* .NOTES .LINK #> [CmdletBinding()] param ( $Domain, $User, $Password ) if (!$Domain) { if (!$User) { $User = Read-Host "Bitte Benutzer eingeben (Domain\Benutzer):" } else { if ($User.Contains("\") -or $User.Contains("@")) { Write-Log 0 "Benutzer ist: $User" $MyInvocation.MyCommand } else { $User = Read-Host "Bitte Benutzer eingeben (Domain\Benutzer):" } if ($User.Contains("\")) { $Domain = $User.Split("\")[0] $User = $User.Split("\")[1] } if ($User.Contains("@")) { $Domain = $User.Split("@")[1] $User = $User.Split("@")[0] } } } else { if (!$User) { $User = Read-Host "Bitte Benutzer eingeben (Benutzer)" } } if (!$Password) { $Password = Read-Host "Bitte Passwort fuer ($Domain\$User) eingeben" -AsSecureString } else { $Password = convertto-securestring -asplaintext -string $Password -force } $DomainUser = "$Domain\$User" $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $DomainUser, $Password return $cred } Export-ModuleMember -Function Confirm-Creds ############################################################################### # DSM7 Funktionen - allgemein function Connect-DSM7Web { <# .SYNOPSIS Stellt Verbindung zur SOAP Schnittstelle von HEAT Software DSM7 her. .DESCRIPTION Stellt Verbindung zur SOAP Schnittstelle von HEAT Software DSM7 her. .EXAMPLE Connect-DSM7Web -WebServer "DSM7 BLS" -UseDefaultCredential .EXAMPLE Connect-DSM7Web -WebServer "DSM7 BLS" -UseSSL -UseDefaultCredential .EXAMPLE Connect-DSM7Web -WebServer "DSM7 BLS" -Port 8080 -User "Domuene\Benutzer" -UserPW "******" .EXAMPLE Connect-DSM7Web -WebServer "DSM7 BLS" -Port 8080 -Credential PSCredential .NOTES .LINK Connect-DSM7Web .LINK Connect-DSM7WebRandom #> [CmdletBinding()] param ( [System.String]$WebServer = "localhost", [System.String]$Port, [switch]$UseSSL = $false, [switch]$UseDefaultCredential = $false, [System.String]$User, [System.String]$UserPW, $Credential ) if ($UseSSL) { $Protocol = "https://" if (!$Port) { $Port = "443" } } else { $Protocol = "http://" if (!$Port) { $Port = "8080" } } $DSM7wsdlURL = $Protocol + $WebServer + ":" + $Port + "/blsAdministration/AdministrationService.asmx?WSDL" $global:DSM7Types = @{} try { Write-Log 0 "Verbinde zu $DSM7wsdlURL." $MyInvocation.MyCommand Write-Log 0 "Powershell Version: $($Host.Version)" $MyInvocation.MyCommand if ($UseDefaultCredential) { $global:DSM7WebService = New-WebServiceProxy -uri $DSM7wsdlURL -UseDefaultCredential -ErrorAction:Stop Write-Log 0 "Verbinde mit Benutzer ($(whoami))." $MyInvocation.MyCommand } else { if (!$Credential) { if ($User) { $Credential = Confirm-Creds -User $User -Password $UserPw } else { return $false } } else { if (!($Credential -is [PSCredential])) { $Credential = Confirm-Creds -User $Credential } } $global:DSM7WebService = New-WebServiceProxy -uri $DSM7wsdlURL -Credential $Credential -ErrorAction:Stop $DSM7WebService.Credentials = $Credential Write-Log 0 "Verbinde mit Benutzer $($Credential.Username)." $MyInvocation.MyCommand } Write-Log 0 "Module Name : $($MyInvocation.MyCommand.Module.Name)" $MyInvocation.MyCommand Write-Log 0 "Module Version: $($MyInvocation.MyCommand.Module.Version)" $MyInvocation.MyCommand if ($global:DSM7WebService) { foreach ($Type in $DSM7WebService.GetType().Assembly.GetExportedTypes()) { $global:DSM7Types.Add($Type.Name, $Type.FullName) } $DSM7ServerInfo = Get-DSM7ServerInfo if ($DSM7ServerInfo) { $global:DSM7Version = $DSM7ServerInfo.CmdbVersionString Write-Log 0 "Verbindung hergestellt." $MyInvocation.MyCommand Write-Log 0 "CmdbGuid = $($DSM7ServerInfo.CmdbGuid)" $MyInvocation.MyCommand Write-Log 0 "CmdbVersionString = $DSM7Version" $MyInvocation.MyCommand Write-Log 0 "MetaModelVersion = $($DSM7ServerInfo.MetaModelVersion)" $MyInvocation.MyCommand if ($DSM7Version -lt $DSM7requiredVersion) { Write-Log 2 "DSM Version wird nicht unterstuetzt!!!" $MyInvocation.MyCommand return $false } if ($DSM7Version -gt $DSM7testedVersion) { Write-Log 1 "DSM Version ($DSM7Version) nicht getestet!!! Einige Funktionen koennten nicht mehr richtige Ergebnisse liefern oder gar nicht mehr funktionieren!!!" $MyInvocation.MyCommand } if ($DSM7Version -gt "7.4.0") { $global:DSM7GenTypeData = "$DSM7GenTypeData,CreationSource" } Write-Log 0 "SOAP Verbindung erfolgreich hergestellt. ($DSM7wsdlURL)" $MyInvocation.MyCommand return $true } else { Write-Log 2 "keine Verbindung" $MyInvocation.MyCommand return $false } } else { Write-Log 2 "keine Verbindung" $MyInvocation.MyCommand return $false } } catch [System.Net.WebException] { Write-Log 2 "keine Verbindung" $MyInvocation.MyCommand $global:DSM7WebService = $false } catch { Write-Log 2 "Verbindungsfehler: $_ $($_.Exception.Message)" $MyInvocation.MyCommand $global:DSM7WebService = $false } } Export-ModuleMember -Function Connect-DSM7Web -Variable DSM7WebService,DSM7Types function Connect-DSM7WebRandom { <# .SYNOPSIS Stellt Verbindung zur SOAP Schnittstelle von HEAT Software DSM7 her, mit einen BSL Server der zufoallig ausgewaehlt wird. .DESCRIPTION Stellt Verbindung zur SOAP Schnittstelle von HEAT Software DSM7 her, mit einen BSL Server der zufaellig ausgewaehlt wird. .EXAMPLE Connect-DSM7WebRandom -WebServer "DSM7 BLS" -UseDefaultCredential .EXAMPLE Connect-DSM7WebRandom -WebServer "DSM7 BLS" -Port 8080 -User "Domaene\Benutzer" -UserPW "******" .EXAMPLE Connect-DSM7WebRandom -WebServer "DSM7 BLS" -Port 8080 -Credential PSCredential .NOTES .LINK Connect-DSM7Web .LINK Connect-DSM7WebRandom #> [CmdletBinding()] param ( [System.String]$WebServer = "localhost", [System.String]$Port = "8080", [switch]$UseSSL = $false, [switch]$UseDefaultCredential = $false, [System.String]$User, [System.String]$UserPW, $Credential ) if ($UseDefaultCredential) { $SOAP = Connect-DSM7Web -WebServer $WebServer -Port $Port -UseSSL:$UseSSL -UseDefaultCredential } else { if (!$Credential) { if ($User) { $Credential = Confirm-Creds -User $User -Password $UserPw } else { return $false } } $SOAP = Connect-DSM7Web -WebServer $WebServer -Port $Port -UseSSL:$UseSSL -Credential $Credential } if ($SOAP) { $AllBLS = Get-DSM7ComputerList -Filter "(BasicInventory.InfrastructureRole:IgnoreCase=BLS)" -Attributes "BasicInventory.FullQualifiedName" Write-Log 0 "Anzahl der gefunden BLS Server = $($AllBLS.count)" $MyInvocation.MyCommand $BLSrandom = Get-Random -Maximum $AllBLS.count if ($AllBLS[$BLSrandom]."BasicInventory.FullQualifiedName" -ne $BLSServer) { DisConnect-DSM7Web $BLSServer = $AllBLS[$BLSrandom]."BasicInventory.FullQualifiedName" Write-Log 0 "Neuer BLS Server = $BLSServer" $MyInvocation.MyCommand if ($User) { $SOAP = Connect-DSM7Web -WebServer $BLSServer -Port $Port -UseSSL:$UseSSL -Credential $Credential } else { $SOAP = Connect-DSM7Web -WebServer $BLSServer -Port $Port -UseSSL:$UseSSL -UseDefaultCredential } } } } Export-ModuleMember Connect-DSM7WebRandom function DisConnect-DSM7Web { <# .SYNOPSIS Verbindung trennen. .DESCRIPTION Verbindung trennen. .EXAMPLE DisConnect-DSM7Web .NOTES .LINK #> $global:DSM7Types = $null $global:DSM7WebService = $null $global:DSM7Version = $null $global:DSM7Version = $null $global:DSM7AssociationSchemaList = $null $global:DSM7PropGroupDefList = $null Write-Log 0 "Verbindung getrennt." $MyInvocation.MyCommand return $true } Export-ModuleMember -Function DisConnect-DSM7Web function Get-DSM7RequestHeader ($action) { $action = $action +"Request" $Webrequest = New-Object $DSM7Types[$action] if ($DSM7Version -gt "7.3.2" -and $Webrequest.MaxResults -eq 0) { $Webrequest.MaxResults = -1 } $Webrequest.Header = New-Object $DSM7Types["RequestHeader"] $Webrequest.Header.UserCulture = $Host.CurrentCulture $Webrequest.Header.ClientInfo = New-Object $DSM7Types["ClientInfo"] $Webrequest.Header.ClientInfo.Name = $Host.Name $Webrequest.Header.ClientInfo.Version = $Host.Version $Webrequest.ServerInfo = New-Object $DSM7Types["ServerInfo"] $Webrequest.ServerInfo.CmdbGuid = {0000000 - 0000 - 0000 - 0000 - 000000000000} $Webrequest.ServerInfo.MetaModelVersion = 203 return $Webrequest } function Get-DSM7ServerInfo { [CmdletBinding()] param ( ) try { $Webrequest = Get-DSM7RequestHeader -action "GetServerInfo" $Webresult = $DSM7WebService.GetServerInfo($Webrequest).ServerInfo if ($Webresult) { Write-Log 0 "GetServerInfo erfolgreich." $MyInvocation.MyCommand return $Webresult } else { Write-Log 2 "GetServerInfo nicht gefunden!" $MyInvocation.MyCommand return $false } } catch [System.Web.Services.Protocols.SoapException] { Write-Log 2 $_.Exception.Detail.Message.'#text' $MyInvocation.MyCommand return $false } catch { Write-Log 2 $MyInvocation.MyCommand return $false } } function Get-DSM7IdentifiedUser { [CmdletBinding()] param ( ) try { $Webrequest = Get-DSM7RequestHeader -action "GetIdentifiedUser" $Webresult = $DSM7WebService.GetIdentifiedUser($Webrequest) if ($Webresult) { Write-Log 0 "GetIdentifiedUser erfolgreich." $MyInvocation.MyCommand return $Webresult } else { Write-Log 2 "GetIdentifiedUser nicht gefunden!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Confirm-Connect { if (!$DSM7WebService) { Write-Log 1 "Keine Verbindung zum Webserver (SOAP)!!!`n`t`t`t`tBitte die Funktion `"Connect-DSM7Web`" fuer die Verbindung benutzen,`n`t`t`t`toder es ist ein Fehler beim verbinden aufgetreten." $MyInvocation.MyCommand return $false } else { return $true } } function Find-DSM7Target { [CmdletBinding()] param ( [System.int32]$ID, [System.String]$Name, [System.String]$LDAPPath, [System.int32]$ParentContID ) if ($ID) { $Target = (Get-DSM7ObjectList -Filter "(&(ObjectId=$ID)$DSM7Targets)") } else { if ($ParentContID) { $Target = (Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$Name)$DSM7Targets)" -ParentContID $ParentContID) } else { $Target = (Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$Name)$DSM7Targets)" -LDAPPath $LDAPPath) } } if ($Target) { if ($Target.BasePropGroupTag -eq "OrgTreeContainer") { $TargetObject = Get-DSM7OrgTreeContainer -ID $Target.ID } else { $TargetObject = Get-DSM7ObjectObject -ID $Target.ID } write-log 0 "TargetObject mit ID($($TargetObject.ID)) gefunden." $MyInvocation.MyCommand return $TargetObject } else { write-log 1 "TargetObject nicht gefunden!" $MyInvocation.MyCommand return $false } } ############################################################################### # DSM7 Funktionen - Convert ############################################################################### function Convert-StringtoLDAPString ($String) { if ($String.contains("\")) { $String = $String.Replace("\","\\")} if ($String.Contains("(") -or $String.Contains(")") ) { $String = $String.Replace("(","\(") $String = $String.Replace(")","\)") } return $String } function Convert-LDAPStringToReplaceString ($String) { if ($String.contains("\(")) {$String = $String.Replace("\(","\+")} if ($String.Contains("\)")) {$String = $String.Replace("\)","\-")} return $String } function Convert-ReplaceStringToLDAPString ($String) { if ($String.contains("\+")) {$String = $String.Replace("\+","\(")} if ($String.Contains("\-")) {$String = $String.Replace("\-","\)")} return $String } function Convert-DSM7ObjectListtoPSObject { [CmdletBinding()] param ( $ObjectList, [switch]$LDAP = $false ) $DSM7ObjectMembers = ($ObjectList[0]|Get-Member -MemberType Properties).Name foreach ($DSM7Object in $ObjectList) { $Raw = Convert-DSM7ObjecttoPSObject -DSM7Object $DSM7Object -DSM7ObjectMembers $DSM7ObjectMembers -LDAP:$LDAP $DSM7ObjectList += @($Raw) } return $DSM7ObjectList } function Convert-DSM7ObjectListtoPSObjectID { [CmdletBinding()] param ( $ObjectList, [switch]$LDAP = $false ) $DSM7ObjectList = @{} $DSM7ObjectMembers = ($ObjectList|Get-Member -MemberType Properties).Name foreach ($DSM7Object in $ObjectList) { $Raw = Convert-DSM7ObjecttoPSObject -DSM7Object $DSM7Object -DSM7ObjectMembers $DSM7ObjectMembers -LDAP:$LDAP $DSM7ObjectList[$DSM7Object.ID]= @($Raw) } return $DSM7ObjectList } function Convert-DSM7ObjecttoPSObject { [CmdletBinding()] param ( $DSM7Object, $DSM7ObjectMembers, [switch]$LDAP = $false ) if (!$DSM7ObjectMembers) { $DSM7ObjectMembers = ($DSM7Object|Get-Member -MemberType Properties).Name } $Raw = New-Object PSObject foreach ($DSM7ObjectMember in $DSM7ObjectMembers) { if ($DSM7ObjectMember -ne "GenTypeData" -and $DSM7ObjectMember -ne "TargetObjectList" -and $DSM7ObjectMember -ne "PropGroupList") { if ($DSM7ObjectMember -like "*List") { $DSM7ObjectMemberLists = $DSM7Object.$DSM7ObjectMember if ($DSM7ObjectMemberLists.Count -gt 0){ $DSM7ObjectMemberListsMembers = ($DSM7ObjectMemberLists|Get-Member -MemberType Properties).Name foreach ($DSM7ObjectMemberListsMember in $DSM7ObjectMemberListsMembers){ for ($I = 0;$I -lt $($DSM7ObjectMemberLists.Count)-1; $I++){ if ($DSM7ObjectMemberListsMember -eq "GenTypeData") { foreach ($GenTypeData in $($DSM7ObjectMemberLists[$I].GenTypeData|get-member -membertype properties)) { add-member -inputobject $Raw -MemberType NoteProperty -name "$DSM7ObjectMember.$I.GenTypeData.$($GenTypeData.Name)" -Value $DSM7Object.GenTypeData.$($GenTypeData.Name) } } else { add-member -inputobject $Raw -MemberType NoteProperty -name "$DSM7ObjectMember.$I.$DSM7ObjectMemberListsMember" -Value $DSM7ObjectMemberLists.$DSM7ObjectMemberListsMember[$I] } } } } else { add-member -inputobject $Raw -MemberType NoteProperty -name $DSM7ObjectMember -Value $DSM7Object.$DSM7ObjectMember } } else { add-member -inputobject $Raw -MemberType NoteProperty -name $DSM7ObjectMember -Value $DSM7Object.$DSM7ObjectMember } } } if ($DSM7Object.GenTypeData) { foreach ($GenTypeData in $($DSM7Object.GenTypeData|get-member -membertype properties)) { add-member -inputobject $Raw -MemberType NoteProperty -name "GenTypeData.$($GenTypeData.Name)" -Value $DSM7Object.GenTypeData.$($GenTypeData.Name) } } if ($LDAP) { $LDAPPath = Get-DSM7LDAPPath $DSM7Object.ParentContID add-member -inputobject $Raw -MemberType NoteProperty -name LDAPPath -Value $LDAPPath } if ($DSM7Object.PropGroupList) { foreach ($PropGroup in $DSM7Object.PropGroupList) { $Groupname = $PropGroup.Tag foreach ($Prop in $PropGroup.PropertyList) { $TypedValue = $Prop.TypedValue if ($Prop.Type -eq "CatalogLink" -and $TypedValue -and $LDAP) { add-member -inputobject $Raw -MemberType NoteProperty -name "$Groupname.$($Prop.Tag).Name" -Value (Get-DSM7ObjectObject -ID $TypedValue -ObjectGroupType "Catalog" ).Name } if ($TypedValue -and $TypedValue.GetType().Name -eq "MdsVersion") { add-member -inputobject $Raw -MemberType NoteProperty -name "$Groupname.$($Prop.Tag)" -Value $Prop.TypedValue.Version } else { add-member -inputobject $Raw -MemberType NoteProperty -name "$Groupname.$($Prop.Tag)" -Value $Prop.TypedValue } } } } return $Raw } function Convert-DSM7AssociationListtoPSObject { [CmdletBinding()] param ( $ObjectList, [switch]$resolvedName = $false ) $IDs = @() $IDs += ($ObjectList|Select-Object -ExpandProperty SourceObjectID) $IDs += ($ObjectList|Select-Object -ExpandProperty TargetObjectID) $IDs = $IDs|Get-Unique $DSM7Objects = Get-DSM7ObjectsObject -IDs $IDs $DSM7Objects += Get-DSM7ObjectsObject -IDs $IDs -ObjectGroupType "Catalog" $DSM7Objects = Convert-DSM7ObjectListtoPSObjectID ($DSM7Objects) foreach ($DSM7Object in $ObjectList) { $DSM7Object = Convert-DSM7AssociationtoPSObject -DSM7Object $DSM7Object -DSM7Objects $DSM7Objects -resolvedName:$resolvedName $DSM7ObjectList += @($DSM7Object) } return $DSM7ObjectList } function Convert-DSM7AssociationtoPSObject { [CmdletBinding()] param ( $DSM7Object, $DSM7Objects, [switch]$resolvedName = $false ) $Raw = New-Object PSObject add-member -inputobject $Raw -MemberType NoteProperty -name ID -Value $DSM7Object.ID add-member -inputobject $Raw -MemberType NoteProperty -name SchemaTag -Value $DSM7Object.SchemaTag add-member -inputobject $Raw -MemberType NoteProperty -name SourceObjectID -Value $DSM7Object.SourceObjectID add-member -inputobject $Raw -MemberType NoteProperty -name TargetObjectID -Value $DSM7Object.TargetObjectID add-member -inputobject $Raw -MemberType NoteProperty -name TargetSchemaTag -Value $DSM7Object.TargetSchemaTag if ($DSM7Object.PropGroupList) { foreach ($PropGroup in $DSM7Object.PropGroupList) { $Groupname = $PropGroup.Tag foreach ($Prop in $PropGroup.PropertyList) { $TypedValue = $Prop.TypedValue # if ($Prop.Type -eq "CatalogLink" -and $TypedValue) { # add-member -inputobject $Raw -MemberType NoteProperty -name "$Groupname.$($Prop.Tag).Name" -Value (Get-DSM7ObjectObject -ID $TypedValue -ObjectGroupType "Catalog" ).Name # } add-member -inputobject $Raw -MemberType NoteProperty -name "$Groupname.$($Prop.Tag)" -Value $Prop.TypedValue } } } if ($resolvedName) { $SourceObjectName = $DSM7Objects.item($Raw.SourceObjectID)[0].Name $TargetObjectName = $DSM7Objects.item($Raw.TargetObjectID)[0].Name add-member -inputobject $Raw -MemberType NoteProperty -name SourceObjectName -Value $SourceObjectName add-member -inputobject $Raw -MemberType NoteProperty -name TargetObjectName -Value $TargetObjectName } return $Raw } function Convert-DSM7PolicyListtoPSObject { [CmdletBinding()] param ( $ObjectList, [switch]$resolvedName = $false ) if ($resolvedName) { $IDs = @() $IDs += ($ObjectList|Select-Object -ExpandProperty AssignedObjectID) $DSM7Objects = Get-DSM7ObjectsObject -IDs $IDs $DSM7ObjectsTargetIDs = $ObjectList|Select-Object -ExpandProperty TargetObjectList|Select-Object -ExpandProperty TargetObjectID -Unique foreach ($DSM7ObjectsTargetID in $DSM7ObjectsTargetIDs) { $filter = "$filter(ObjectID=$DSM7ObjectsTargetID)" } $filter = "(|$filter)" $DSM7ObjectsTargets = Get-DSM7ObjectList -Filter $filter } $DSM7ObjectMembers = ($ObjectList[0]|Get-Member -MemberType Properties).Name foreach ($DSM7Object in $ObjectList) { $DSM7Object = Convert-DSM7PolicytoPSObject -DSM7Object $DSM7Object -DSM7ObjectMembers $DSM7ObjectMembers -DSM7Objects $DSM7Objects -DSM7ObjectsTargets $DSM7ObjectsTargets -resolvedName:$resolvedName $DSM7ObjectList += @($DSM7Object) } return $DSM7ObjectList } function Convert-DSM7PolicytoPSObject { [CmdletBinding()] param ( $DSM7Object, $DSM7ObjectMembers, $DSM7Objects, $DSM7ObjectsTargets, [switch]$resolvedName = $false ) $AssignedObjectNameOld = "###" if (!$DSM7ObjectMembers) {$DSM7ObjectMembers = ($DSM7Object|Get-Member -MemberType Properties).Name} if ($resolvedName) { if (!$DSM7Objects) { $IDs = @() $IDs += ($DSM7Object|Select-Object -ExpandProperty AssignedObjectID) $DSM7Objects = Get-DSM7ObjectsObject -IDs $IDs } if (!$DSM7ObjectsTargets) { $DSM7ObjectsTargetIDs = $DSM7Object|Select-Object -ExpandProperty TargetObjectList|Select-Object -ExpandProperty TargetObjectID -Unique foreach ($DSM7ObjectsTargetID in $DSM7ObjectsTargetIDs) { $filter = "$filter(ObjectID=$DSM7ObjectsTargetID)" } $filter = "(|$filter)" $DSM7ObjectsTargets = Get-DSM7ObjectList -Filter $filter } } $Raw = New-Object PSObject foreach ($DSM7ObjectMember in $DSM7ObjectMembers) { if ($DSM7ObjectMember -ne "GenTypeData" -and $DSM7ObjectMember -ne "TargetObjectList" -and $DSM7ObjectMember -ne "PropGroupList" -and $DSM7ObjectMember -ne "PolicyRestrictionList" -and $DSM7ObjectMember -ne "SwInstallationParameters") { if ($DSM7ObjectMember -like "*List") { $DSM7ObjectMemberLists = $DSM7Object.$DSM7ObjectMember if ($DSM7ObjectMemberLists.Count -gt 0){ $DSM7ObjectMemberListsMembers = ($DSM7ObjectMemberLists|Get-Member -MemberType Properties).Name foreach ($DSM7ObjectMemberListsMember in $DSM7ObjectMemberListsMembers){ for ($I = 0;$I -lt $($DSM7ObjectMemberLists.Count)-1; $I++){ if ($DSM7ObjectMemberListsMember -eq "GenTypeData") { foreach ($GenTypeData in $($DSM7ObjectMemberLists[$I].GenTypeData|get-member -membertype properties)) { add-member -inputobject $Raw -MemberType NoteProperty -name "$DSM7ObjectMember.$I.GenTypeData.$($GenTypeData.Name)" -Value $DSM7Object.GenTypeData.$($GenTypeData.Name) } } else { add-member -inputobject $Raw -MemberType NoteProperty -name "$DSM7ObjectMember.$I.$DSM7ObjectMemberListsMember" -Value $DSM7ObjectMemberLists.$DSM7ObjectMemberListsMember[$I] } } } } else { add-member -inputobject $Raw -MemberType NoteProperty -name $DSM7ObjectMember -Value $DSM7Object.$DSM7ObjectMember } } else { add-member -inputobject $Raw -MemberType NoteProperty -name $DSM7ObjectMember -Value $DSM7Object.$DSM7ObjectMember } } } if ($DSM7Object.GenTypeData) { foreach ($GenTypeData in $($DSM7Object.GenTypeData|get-member -membertype properties)) { add-member -inputobject $Raw -MemberType NoteProperty -name "GenTypeData.$($GenTypeData.Name)" -Value $DSM7Object.GenTypeData.$($GenTypeData.Name) } } add-member -inputobject $Raw -MemberType NoteProperty -name "PolicyRestrictionList" -Value $DSM7Object.PolicyRestrictionList if ($resolvedName) { if ($AssignedObjectName -ne $AssignedObjectNameOld) { $AssignedObjectName = $($DSM7Objects|where {$_.ID -eq $Raw.AssignedObjectID}).Name $AssignedObjectUniqueId = $($DSM7Objects|where {$_.ID -eq $Raw.AssignedObjectID}).UniqueId $AssignedObjectSchemaTag = $($DSM7Objects|where {$_.ID -eq $Raw.AssignedObjectID}).SchemaTag } add-member -inputobject $Raw -MemberType NoteProperty -name AssignedObjectName -Value $AssignedObjectName add-member -inputobject $Raw -MemberType NoteProperty -name AssignedObjectSchemaTag -Value $AssignedObjectSchemaTag add-member -inputobject $Raw -MemberType NoteProperty -name AssignedObjectUniqueId -Value $AssignedObjectUniqueId $AssignedObjectNameOld = $AssignedObjectName } if ($DSM7Object.SwInstallationParameters) { $SwInstallationParameterList = @() foreach ($SwInstallationParameter in $DSM7Object.SwInstallationParameters) { $SwInstallationParameterPSObject = New-Object PSObject $DSM7ObjectMemberListsMembers = ($DSM7Object.SwInstallationParameters|Get-Member -MemberType Properties).Name foreach ($DSM7ObjectMemberListsMember in $DSM7ObjectMemberListsMembers){ if ($DSM7ObjectMemberListsMember -eq "GenTypeData") { foreach ($GenTypeData in $($SwInstallationParameter.GenTypeData|get-member -membertype properties)) { add-member -inputobject $SwInstallationParameterPSObject -MemberType NoteProperty -name "GenTypeData.$($GenTypeData.Name)" -Value $SwInstallationParameter.GenTypeData.$($GenTypeData.Name) } } else { add-member -inputobject $SwInstallationParameterPSObject -MemberType NoteProperty -name "$DSM7ObjectMemberListsMember" -Value $SwInstallationParameter.$DSM7ObjectMemberListsMember } } $SwInstallationParameterList += $SwInstallationParameterPSObject } } add-member -inputobject $Raw -MemberType NoteProperty -name "SwInstallationParameters" -Value $SwInstallationParameterList if ($DSM7Object.PropGroupList) { foreach ($PropGroup in $DSM7Object.PropGroupList) { $Groupname = $PropGroup.Tag foreach ($Prop in $PropGroup.PropertyList) { $TypedValue = $Prop.TypedValue if ($Prop.Type -eq "CatalogLink" -and $TypedValue -and $LDAP) { add-member -inputobject $Raw -MemberType NoteProperty -name "$Groupname.$($Prop.Tag).Name" -Value (Get-DSM7ObjectObject -ID $TypedValue -ObjectGroupType "Catalog" ).Name } add-member -inputobject $Raw -MemberType NoteProperty -name "$Groupname.$($Prop.Tag)" -Value $Prop.TypedValue } } } if ($DSM7Object.TargetObjectList) { $TargetObjectList = @() foreach ($TargetObject in $DSM7Object.TargetObjectList) { $TargetPSObject = New-Object PSObject if ($resolvedName) { $TargetObjectName = $($DSM7ObjectsTargets|where {$_.ID -eq $TargetObject.TargetObjectID}).Name add-member -inputobject $TargetPSObject -MemberType NoteProperty -name TargetObjectName -Value $TargetObjectName } add-member -inputobject $TargetPSObject -MemberType NoteProperty -name TargetObjectID -Value $TargetObject.TargetObjectID $TargetObjectList += $TargetPSObject } add-member -inputobject $Raw -MemberType NoteProperty -name "TargetObjectList" -Value $TargetObjectList } return $Raw } function Convert-DSM7PolicyInstancetoPSObject { [CmdletBinding()] param ( $DSM7Object, $DSM7ObjectMembers, $DSM7Objects, $DSM7Configs, [switch]$resolvedName = $false ) $AssignedObjectNameOld = "###" $Raw = New-Object PSObject foreach ($DSM7ObjectMember in $DSM7ObjectMembers) { if ($DSM7ObjectMember -ne "GenTypeData" -and $DSM7ObjectMember -ne "TargetObjectList") { if ($DSM7ObjectMember -like "*List") { $DSM7ObjectMemberLists = $DSM7Object.$DSM7ObjectMember if ($DSM7ObjectMemberLists.Count -gt 0){ $DSM7ObjectMemberListsMembers = ($DSM7ObjectMemberLists|Get-Member -MemberType Properties).Name foreach ($DSM7ObjectMemberListsMember in $DSM7ObjectMemberListsMembers){ for ($I = 0;$I -lt $($DSM7ObjectMemberLists.Count)-1; $I++){ if ($DSM7ObjectMemberListsMember -eq "GenTypeData") { foreach ($GenTypeData in $($DSM7ObjectMemberLists[$I].GenTypeData|get-member -membertype properties)) { add-member -inputobject $Raw -MemberType NoteProperty -name "$DSM7ObjectMember.$I.GenTypeData.$($GenTypeData.Name)" -Value $DSM7Object.GenTypeData.$($GenTypeData.Name) } } else { add-member -inputobject $Raw -MemberType NoteProperty -name "$DSM7ObjectMember.$I.$DSM7ObjectMemberListsMember" -Value $DSM7ObjectMemberLists.$DSM7ObjectMemberListsMember[$I] } } } } else { add-member -inputobject $Raw -MemberType NoteProperty -name $DSM7ObjectMember -Value $DSM7Object.$DSM7ObjectMember } } else { add-member -inputobject $Raw -MemberType NoteProperty -name $DSM7ObjectMember -Value $DSM7Object.$DSM7ObjectMember } } } if ($DSM7Version -gt "7.3.0") { $AssignedObjectID = $($DSM7Configs|where {$_.ID -eq $Raw.AssignedConfiguration}).SoftwareObjectID add-member -inputobject $Raw -MemberType NoteProperty -name AssignedObjectID -Value $AssignedObjectID } if ($resolvedName) { if ($AssignedObjectName -ne $AssignedObjectNameOld) { $AssignedObjectName = $($DSM7Objects|where {$_.ID -eq $Raw.AssignedObjectID}).Name $AssignedObjectSchemaTag = $($DSM7Objects|where {$_.ID -eq $Raw.AssignedObjectID}).SchemaTag $AssignedObjectUniqueId = $($DSM7Objects|where {$_.ID -eq $Raw.AssignedObjectID}).UniqueId } add-member -inputobject $Raw -MemberType NoteProperty -name AssignedObjectName -Value $AssignedObjectName add-member -inputobject $Raw -MemberType NoteProperty -name AssignedObjectSchemaTag -Value $AssignedObjectSchemaTag add-member -inputobject $Raw -MemberType NoteProperty -name AssignedObjectUniqueId -Value $AssignedObjectUniqueId $AssignedObjectNameOld = $AssignedObjectName if ($DSM7Object.TargetObjectID) { $TargetObjectName = $($DSM7Objects|where {$_.ID -eq $DSM7Object.TargetObjectID}).Name add-member -inputobject $Raw -MemberType NoteProperty -name TargetObjectName -Value $TargetObjectName } } if ($DSM7Object.GenTypeData) { foreach ($GenTypeData in $($DSM7Object.GenTypeData|get-member -membertype properties)) { add-member -inputobject $Raw -MemberType NoteProperty -name "GenTypeData.$($GenTypeData.Name)" -Value $DSM7Object.GenTypeData.$($GenTypeData.Name) } } if ($DSM7Object.PropGroupList) { foreach ($PropGroup in $DSM7Object.PropGroupList) { $Groupname = $PropGroup.Tag foreach ($Prop in $PropGroup.PropertyList) { $TypedValue = $Prop.TypedValue if ($Prop.Type -eq "CatalogLink" -and $TypedValue -and $LDAP) { add-member -inputobject $Raw -MemberType NoteProperty -name "$Groupname.$($Prop.Tag).Name" -Value (Get-DSM7ObjectObject -ID $TypedValue -ObjectGroupType "Catalog" ).Name } add-member -inputobject $Raw -MemberType NoteProperty -name "$Groupname.$($Prop.Tag)" -Value $Prop.TypedValue } } } if ($DSM7Object.TargetObjectList) { $TargetObjectList = @() foreach ($TargetObject in $DSM7Object.TargetObjectList) { $TargetPSObject = New-Object PSObject $TargetObjectName = $($DSM7Objects|where {$_.ID -eq $TargetObject.TargetObjectID}).Name add-member -inputobject $TargetPSObject -MemberType NoteProperty -name TargetObjectName -Value $TargetObjectName add-member -inputobject $TargetPSObject -MemberType NoteProperty -name TargetObjectID -Value $TargetObject.TargetObjectID $TargetObjectList += $TargetPSObject } add-member -inputobject $Raw -MemberType NoteProperty -name "TargetObjectList" -Value $TargetObjectList } return $Raw } function Convert-DSM7PolicyInstanceListtoPSObject { [CmdletBinding()] param ( $ObjectList,[switch]$resolvedName = $false) $DSM7ConfigIDs = @() if ($DSM7Version -gt "7.3.0") { $DSM7ConfigIDs += ($ObjectList|where {$_.AssignedConfiguration}|Select-Object -ExpandProperty AssignedConfiguration) if ($DSM7ConfigIDs.count -gt 0) { $DSM7Configs = Get-DSM7SwInstallationConfigurationsObject $DSM7ConfigIDs } } if ($resolvedName) { $IDs = @() if ($DSM7Version -gt "7.3.0") { $IDs += ($DSM7Configs|where {$_.SoftwareObjectID}|Select-Object -ExpandProperty SoftwareObjectID) } else { $IDs += ($ObjectList|Select-Object -ExpandProperty AssignedObjectID) } $IDs += ($ObjectList|Select-Object -ExpandProperty TargetObjectID) $DSM7Objects = Get-DSM7ObjectsObject -IDs $IDs } $DSM7ObjectMembers = ($ObjectList|Get-Member -MemberType Properties).Name foreach ($DSM7Object in $ObjectList) { $DSM7Object = Convert-DSM7PolicyInstancetoPSObject -DSM7Object $DSM7Object -DSM7ObjectMembers $DSM7ObjectMembers -DSM7Objects $DSM7Objects -DSM7Configs $DSM7Configs -resolvedName:$resolvedName $DSM7ObjectList += @($DSM7Object) } return $DSM7ObjectList } function Convert-DSM7StatiscstoPSObject { [CmdletBinding()] param ( $DSM7Statistics ) $Raw = New-Object PSObject foreach ($Stat in $DSM7Statistics) { add-member -inputobject $Raw -MemberType NoteProperty -name $Stat.Key -Value $Stat.Count } return $Raw } function Convert-DSM7VariableGrouptoPSObject { [CmdletBinding()] param ( $DSM7Objects ) foreach ($DSM7Object in $DSM7Objects) { foreach ($Variable in $($DSM7Object.VariableList)) { $Raw = New-Object PSObject add-member -inputobject $Raw -MemberType NoteProperty -name GroupTag -Value $DSM7Object.Tag add-member -inputobject $Raw -MemberType NoteProperty -name GroupID -Value $DSM7Object.ID add-member -inputobject $Raw -MemberType NoteProperty -name GroupVisibility -Value $DSM7Object.Visibility add-member -inputobject $Raw -MemberType NoteProperty -name GroupIsSystem -Value $DSM7Object.IsSystem add-member -inputobject $Raw -MemberType NoteProperty -name Tag -Value $Variable.Tag add-member -inputobject $Raw -MemberType NoteProperty -name ID -Value $Variable.ID add-member -inputobject $Raw -MemberType NoteProperty -name IsDisabled -Value $Variable.IsDisabled add-member -inputobject $Raw -MemberType NoteProperty -name IsSystem -Value $Variable.IsSystem add-member -inputobject $Raw -MemberType NoteProperty -name AvailableOnClient -Value $Variable.AvailableOnClient add-member -inputobject $Raw -MemberType NoteProperty -name VariableType -Value $Variable.VariableType if ($Variable.GenTypeData) { foreach ($GenTypeData in $($Variable.GenTypeData|get-member -membertype properties)) { add-member -inputobject $Raw -MemberType NoteProperty -name "GenTypeData.$($GenTypeData.Name)" -Value $Variable.GenTypeData.$($GenTypeData.Name) } } $AllVariable +=@($Raw) } } return $AllVariable } function Convert-DSM7VariabletoPSObject { [CmdletBinding()] param ( $DSM7Object, $DSM7VariableGroups ) $DSM7VariableGroups = Convert-ArrayToHash -myArray $DSM7VariableGroups -myKey "ID" $Raw = New-Object PSObject add-member -inputobject $Raw -MemberType NoteProperty -name ID -Value $DSM7Object.ID add-member -inputobject $Raw -MemberType NoteProperty -name IsInherited -Value $DSM7Object.IsInherited add-member -inputobject $Raw -MemberType NoteProperty -name SchemaTag -Value $DSM7Object.SchemaTag add-member -inputobject $Raw -MemberType NoteProperty -name TargetObjectID -Value $DSM7Object.TargetObjectID add-member -inputobject $Raw -MemberType NoteProperty -name Value -Value $DSM7Object.Value add-member -inputobject $Raw -MemberType NoteProperty -name VariableID -Value $DSM7Object.VariableID add-member -inputobject $Raw -MemberType NoteProperty -name VariableName -Value $DSM7VariableGroups.Item($DSM7Object.VariableID).Tag add-member -inputobject $Raw -MemberType NoteProperty -name GroupID -Value $DSM7VariableGroups.Item($DSM7Object.VariableID).GroupID add-member -inputobject $Raw -MemberType NoteProperty -name GroupName -Value $DSM7VariableGroups.Item($DSM7Object.VariableID).GroupTag if ($DSM7Object.GenTypeData) { foreach ($GenTypeData in $($DSM7Object.GenTypeData|get-member -membertype properties)) { add-member -inputobject $Raw -MemberType NoteProperty -name "GenTypeData.$($GenTypeData.Name)" -Value $DSM7Object.GenTypeData.$($GenTypeData.Name) } } return $Raw } function Convert-DSM7VariabletoPSObjects { [CmdletBinding()] param ( $DSM7Objects ) $VariableGroups = Get-DSM7VariableGroups foreach ($DSM7Object in $DSM7Objects) { $DSM7Object = Convert-DSM7VariabletoPSObject -DSM7Object $DSM7Object -DSM7VariableGroups $VariableGroups $DSM7ObjectList += @($DSM7Object) } return $DSM7ObjectList } function Convert-DSM7SwInstallationParamDefinitionstoPSObject { [CmdletBinding()] param ( $DSM7Object, $DSM7ObjectMembers, [switch]$resolvedName = $false ) $Raw = New-Object PSObject foreach ($DSM7ObjectMember in $DSM7ObjectMembers) { if ($DSM7ObjectMember -ne "GenTypeData") { if ($DSM7ObjectMember -like "*List" -or $DSM7ObjectMember -like "*Category" ) { $DSM7ObjectMemberLists = $DSM7Object.$DSM7ObjectMember $RawListArray =@() foreach ($DSM7ObjectMemberList in $DSM7ObjectMemberLists) { $DSM7ObjectMemberListMembers = ($DSM7ObjectMemberList|Get-Member -MemberType Properties).Name $RawList = New-Object PSObject $RawListArrayListArray =@() foreach ($DSM7ObjectMemberListMember in $DSM7ObjectMemberListMembers){ $value = $DSM7ObjectMemberList.$DSM7ObjectMemberListMember if ($DSM7ObjectMemberListMember -like "*List") { $DSM7ObjectMemberListMemberLists = $DSM7ObjectMemberList.$DSM7ObjectMemberListMember foreach ($DSM7ObjectMemberListMemberList in $DSM7ObjectMemberListMemberLists) { $RawListList = New-Object PSObject $DSM7ObjectMemberListMemberListMembers = ($DSM7ObjectMemberListMemberList|Get-Member -MemberType Properties).Name foreach ($DSM7ObjectMemberListMemberListMember in $DSM7ObjectMemberListMemberListMembers) { if ($DSM7ObjectMemberListMemberListMember -eq "GenTypeData") { foreach ($GenTypeData in $($DSM7ObjectMemberListMemberList.GenTypeData|get-member -membertype properties)) { add-member -inputobject $RawListList -MemberType NoteProperty -name "GenTypeData.$($GenTypeData.Name)" -Value $DSM7ObjectMemberListMemberList.GenTypeData.$($GenTypeData.Name) } } else { add-member -inputobject $RawListList -MemberType NoteProperty -name "$DSM7ObjectMemberListMemberListMember" -Value $DSM7ObjectMemberListMemberList.$DSM7ObjectMemberListMemberListMember } } $RawListArrayListArray += $RawListList } $value = $RawListArrayListArray } if ($DSM7ObjectMemberListMember -eq "GenTypeData") { foreach ($GenTypeData in $($DSM7ObjectMemberList.GenTypeData|get-member -membertype properties)) { add-member -inputobject $RawList -MemberType NoteProperty -name "GenTypeData.$($GenTypeData.Name)" -Value $DSM7ObjectMemberList.GenTypeData.$($GenTypeData.Name) } } else { add-member -inputobject $RawList -MemberType NoteProperty -name "$DSM7ObjectMemberListMember" -Value $value } } $RawListArray += $RawList } add-member -inputobject $Raw -MemberType NoteProperty -name $DSM7ObjectMember -Value $RawListArray } else { add-member -inputobject $Raw -MemberType NoteProperty -name $DSM7ObjectMember -Value $DSM7Object.$DSM7ObjectMember } } } if ($DSM7Object.GenTypeData) { foreach ($GenTypeData in $($DSM7Object.GenTypeData|get-member -membertype properties)) { add-member -inputobject $Raw -MemberType NoteProperty -name "GenTypeData.$($GenTypeData.Name)" -Value $DSM7Object.GenTypeData.$($GenTypeData.Name) } } if ($resolvedName -and $DSM7Object.InstallationParamType -eq "ObjectLink") { $filter = ($($DSM7Object.FrontEndData) -split "ObjectFilter>")[1].trimend("</") if ($DSM7Object.DefaultValue) { $DefaultValueName = (Get-DSM7Object -ID $DSM7Object.DefaultValue).Name } add-member -inputobject $Raw -MemberType NoteProperty -name "DefaultValueName" -Value $DefaultValueName } return $Raw } function Convert-DSM7SwInstallationParamDefinitionstoPSObjects { [CmdletBinding()] param ( $DSM7Objects, [switch]$resolvedName = $false ) $DSM7ObjectMembers = ($DSM7Objects[0]|Get-Member -MemberType Properties).Name foreach ($DSM7Object in $DSM7Objects) { $DSM7Object = Convert-DSM7SwInstallationParamDefinitionstoPSObject -DSM7Object $DSM7Object -DSM7ObjectMembers $DSM7ObjectMembers -resolvedName:$resolvedName $DSM7ObjectList += @($DSM7Object) } return $DSM7ObjectList } function Convert-DSM7AssociationSchemaListtoPSObject { [CmdletBinding()] param ( $DSM7Object, $DSM7ObjectMembers ) $Raw = New-Object PSObject foreach ($DSM7ObjectMember in $DSM7ObjectMembers) { if ($DSM7ObjectMember -ne "GenTypeData") { if ($DSM7ObjectMember -like "*List") { $DSM7ObjectMemberLists = $DSM7Object.$DSM7ObjectMember if ($DSM7ObjectMemberLists.Count -gt 0){ $DSM7ObjectMemberListsMembers = ($DSM7ObjectMemberLists|Get-Member -MemberType Properties).Name foreach ($DSM7ObjectMemberListsMember in $DSM7ObjectMemberListsMembers){ for ($I = 0;$I -lt $DSM7ObjectMemberLists.Count; $I++){ if ($DSM7ObjectMemberListsMember -eq "GenTypeData") { foreach ($GenTypeData in $($DSM7ObjectMemberLists[$I].GenTypeData|get-member -membertype properties)) { add-member -inputobject $Raw -MemberType NoteProperty -name "$DSM7ObjectMember.$I.GenTypeData.$($GenTypeData.Name)" -Value $DSM7Object.GenTypeData.$($GenTypeData.Name) } } else { add-member -inputobject $Raw -MemberType NoteProperty -name "$DSM7ObjectMember.$I.$DSM7ObjectMemberListsMember" -Value $DSM7ObjectMemberLists.$DSM7ObjectMemberListsMember[$I] } } } } else { add-member -inputobject $Raw -MemberType NoteProperty -name $DSM7ObjectMember -Value $DSM7Object.$DSM7ObjectMember } } else { add-member -inputobject $Raw -MemberType NoteProperty -name $DSM7ObjectMember -Value $DSM7Object.$DSM7ObjectMember } } } if ($DSM7Object.GenTypeData) { foreach ($GenTypeData in $($DSM7Object.GenTypeData|get-member -membertype properties)) { add-member -inputobject $Raw -MemberType NoteProperty -name "GenTypeData.$($GenTypeData.Name)" -Value $DSM7Object.GenTypeData.$($GenTypeData.Name) } } if ($DSM7Object.PropGroupList) { foreach ($PropGroup in $DSM7Object.PropGroupList) { $Groupname = $PropGroup.Tag foreach ($Prop in $PropGroup.PropertyList) { $TypedValue = $Prop.TypedValue if ($Prop.Type -eq "CatalogLink" -and $TypedValue -and $LDAP) { add-member -inputobject $Raw -MemberType NoteProperty -name "$Groupname.$($Prop.Tag).Name" -Value (Get-DSM7ObjectObject -ID $TypedValue -ObjectGroupType "Catalog" ).Name } add-member -inputobject $Raw -MemberType NoteProperty -name "$Groupname.$($Prop.Tag)" -Value $Prop.TypedValue } } } return $Raw } function Convert-DSM7AssociationSchemaListtoPSObjects { [CmdletBinding()] param ( $DSM7Objects ) $DSM7ObjectMembers = ($DSM7Objects|Get-Member -MemberType Properties).Name foreach ($DSM7Object in $DSM7Objects) { $DSM7Object = Convert-DSM7AssociationSchemaListtoPSObject -DSM7Object $DSM7Object -DSM7ObjectMembers $DSM7ObjectMembers $DSM7ObjectList += @($DSM7Object) } return $DSM7ObjectList } ############################################################################### # DSM7 Funktionen - Objekte ############################################################################### function Get-DSM7ObjectList { <# .SYNOPSIS Gibt eine Liste von Objekten zurueck. .DESCRIPTION Gibt eine Liste von Objekten zurueck. .EXAMPLE Get-DSM7ObjectList -LDAPPath "Managed Users & Computers/OU1/OU2" -recursive .EXAMPLE Get-DSM7ObjectList -LDAProot "<LDAP://rootCatalog>" -Filter "(&(Name=Windows 10 \(x64\))(PatchCa tegoryObject.RequiredLicense=DSM7_LUMENSION_PATCH))" -Attributes "PatchCategoryObject.RequiredLicense" .NOTES Nur benutzen wenn man die Objektstruktur genau kennt! Es kann sonst zu langen Anwortzeiten oder Fehlern kommen! Alternativen: Get-DSM7SoftwareList Get-DSM7ComputerList .LINK Get-DSM7ObjectList .LINK Get-DSM7Object .LINK Get-DSM7Objects #> [CmdletBinding()] param ( [system.string]$Attributes, [system.string]$Filter, [system.string]$LDAPPath = "", [system.string]$LDAProot = "<LDAP://rootDSE>", [int]$ParentContID, [switch]$GenTypeData = $false, [switch]$recursive = $false ) if (Confirm-Connect) { try { if ($LDAPPath -or $ParentContID -gt 0) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } $Filternew = "(&(ParentContID=$ParentContID)$Filter)" } else { $Filternew = $Filter } if ($GenTypeData){ if ($Attributes) { $Attributes = $Attributes + "," + $DSM7GenTypeData } else { $Attributes = $DSM7GenTypeData } } $Webrequest = Get-DSM7RequestHeader -action "GetObjectList" $Webrequest.LdapQuery = "$LDAProot;$Filternew;BasePropGroupTag,Description,ParentContID,UniqueId,$Attributes;subtree" $Webrequest.OrderBy = "Name" $Webrequest.MaxResults = -1 $Webresult = $($DSM7WebService.GetObjectList($Webrequest)).ObjectList if ($recursive -and $ParentContID) { foreach ($WebresultRaw in $Webresult) { if ($WebresultRaw.SchemaTag -eq "Domain" -or $WebresultRaw.SchemaTag -eq "OU" -or $WebresultRaw.SchemaTag -eq "SwFolder" -or $WebresultRaw.SchemaTag -eq "CitrixFarm" -or $WebresultRaw.SchemaTag -eq "CitrixZone" -or $WebresultRaw.SchemaTag -eq "SwLibrary") { $Webresultsub = Get-DSM7ObjectList -Attributes $Attributes -Filter $Filter -ParentContID $WebresultRaw.ID -recursive if ($Webresultsub) { $Webresult += $Webresultsub } } } } if ($Webresult.count -gt 0) { $Webresult = Convert-DSM7ObjectListtoPSObject($Webresult) Write-Log 0 "($Filter$LDAPPath) erfolgreich." $MyInvocation.MyCommand return $Webresult } else { Write-Log 1 "($Filter$LDAPPath) nicht gefunden!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7ObjectList function Get-DSM7ObjectObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [int]$ID, [system.string]$ObjectGroupType = "Object" ) try { $Webrequest = Get-DSM7RequestHeader -action "GetObject" $Webrequest.ObjectId = $ID $Webrequest.RequestedObjectGroupType = $ObjectGroupType $Webresult = $DSM7WebService.GetObject($Webrequest).RetrievedObject return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } if ($Dev) {Export-ModuleMember -Function Get-DSM7ObjectObject} function Get-DSM7Object { <# .SYNOPSIS Ermittelt DSM Objekt. .DESCRIPTION Ermittelt DSM Objekt. .EXAMPLE Get-DSM7Objekt -ID 123456 .NOTES .LINK #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [int]$ID, [system.string]$ObjectGroupType = "Object" ) if (Confirm-Connect) { $return = Get-DSM7ObjectObject -ID $ID -ObjectGroupType $ObjectGroupType if ($return) { $return = Convert-DSM7ObjecttoPSObject($return) Write-Log 0 "ID ($ID) und Objectgruppe ($ObjectGroupType) erfolgreich." $MyInvocation.MyCommand return $return } else { Write-Log 2 "ID ($ID) und Objectgruppe ($ObjectGroupType) nicht erfolgreich!" $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7Object function Get-DSM7ObjectsObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $IDs, [system.string]$ObjectGroupType = "Object" ) try { $IDs = $IDs|Sort-Object|Get-Unique $Webrequest = Get-DSM7RequestHeader -action "GetObjects" $Webrequest.ObjectIds = $IDs $Webrequest.RequestedObjectGroupType = $ObjectGroupType $Webresult = $DSM7WebService.GetObjects($Webrequest).ObjectList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7Objects { <# .SYNOPSIS Gibt eine Liste von Objekten zurueck. .DESCRIPTION Gibt eine Liste von Objekten zurueck. Nur benutzen wenn man die Objektstruktur genau kennt!!! .EXAMPLE Get-DSM7Objects -IDs (1,2,3) .NOTES .LINK Get-DSM7ObjectList .LINK Get-DSM7Object .LINK Get-DSM7Objects #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [System.Array]$IDs, [system.string]$ObjectGroupType = "Object" ) $result = Get-DSM7ObjectsObject -IDs $IDs -ObjectGroupType $ObjectGroupType if ($result) { return Convert-DSM7ObjectListtoPSObject($result) } else { return $false } } Export-ModuleMember -Function Get-DSM7Objects function Update-DSM7Object { [CmdletBinding()] param ( $Object, [string[]]$Values ) try { $Webrequest = Get-DSM7RequestHeader -action "UpdateObject" $WebrequestState = Get-DSM7RequestHeader -action "UpdateStateInfoOfObject" if ($DSM7Version -ne "7.4.3.0"){ if (!$DSM7PropGroupDefList){ $global:DSM7PropGroupDefList = Convert-ArrayToHash -myArray (Get-DSM7PropGroupDefListObject) -myKey "Tag" } } $groupkey = @{} $valueskey = @{} foreach ($Value in $Values) { $ValueName = $Value.split("=",2)[0] $ValueValue = $Value.split("=",2)[1] if ($ValueName.contains(".")) { $PropGroup = $ValueName.split(".")[0] $PropName = $ValueName.split(".")[1] $Valueskey[$PropName] = $ValueValue $groupkey[$PropGroup] += $Valueskey $valueskey = @{} } else { if (($ValueValue).contains(":String") -or ($ValueValue).contains(":Option")) { $Object.$ValueName = $ValueValue.split(":")[0] } else { $Object.$ValueName = $ValueValue } } } $StateInfo = $false $PropGroupList = @() $PropGroupListStateInfo = @() foreach ($Groupname in $groupkey.keys) { $PropertyList = @() foreach ($Valuename in $groupkey.$groupname.keys) { if (($groupkey.$groupname.$Valuename).contains(":String") -or ($groupkey.$groupname.$Valuename).contains(":Option") ) { $Value = $groupkey.$groupname.$Valuename.split(":")[0] } else { $Value = $groupkey.$groupname.$Valuename } Write-Log 0 "aendere $Groupname.$Valuename = $Value" $MyInvocation.MyCommand $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfString"] $PropertyListObject.Tag = $Valuename $PropertyListObject.Type = ((($Object.PropGroupList|Where Tag -EQ $Groupname).propertyList)|where Tag -EQ $Valuename).Type $PropertyListObject.TypedValue = $Value $PropertyList += $PropertyListObject } $PropGroupListObject = New-Object $DSM7Types["MdsPropGroup"] $PropGroupListObject.Tag = $Groupname $PropGroupListObject.PropertyList = $PropertyList $PropGroupList += $PropGroupListObject if ($DSM7PropGroupDefList.$Groupname.PropGroupInfoType -eq "StateInfo") { $StateInfo = $true $PropGroupListStateInfo += $PropGroupListObject } } $Webrequest.ObjectToUpdate = $Object $Webrequest.ObjectToUpdate.PropGroupList = $PropGroupList $Object = $DSM7WebService.UpdateObject($Webrequest).UpdatedObject if ($StateInfo) { $WebrequestState.ObjectToUpdate = $Object $WebrequestState.ObjectToUpdate.PropGroupList = $PropGroupListStateInfo $Object = $DSM7WebService.UpdateStateInfoOfObject($WebrequestState).UpdatedObject } Write-Log 0 "($($Object.Name)) erfolgreich." $MyInvocation.MyCommand return $Object } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7LDAPPath { <# .SYNOPSIS Gibt ein den LDAP Path zurueck. .DESCRIPTION Gibt ein den LDAP Path zurueck. .EXAMPLE Get-DSM7LDAPPath -ParentContID 1234 .NOTES .LINK Get-DSM7ObjectList .LINK Get-DSM7Object .LINK Get-DSM7Objects #> [CmdletBinding()] param ( [int]$ParentContID = 0 ) [system.string]$LDAPPath = "" while ($ParentContID -ne 0) { $Container = Get-DSM7OrgTreeContainerObject -ID $ParentContID $ParentContID = $Container.ParentContID $LDAPPath = "/" + $Container.Name + $LDAPPath } return $LDAPPath.TrimStart("/") } Export-ModuleMember -Function Get-DSM7LDAPPath function Get-DSM7LDAPPathID { [CmdletBinding()] param ( [system.string]$LDAPPath, [int]$ParentContID) try { if ($LDAPPath.Contains("/")) { foreach ($ParentCont in $LDAPPath.split("/")) { if ($ParentContID -eq 0) { $Filter = "(&(Name:IgnoreCase=$ParentCont)$DSM7Structure)" } else { $Filter = "(&(Name:IgnoreCase=$ParentCont)(ParentContID=$ParentContID)$DSM7Structure)" } $result = Get-DSM7ObjectList -Filter $Filter if ($result) { $ParentCont = $result.Name $ParentContID = $result.ID } else { $ParentContID = 0 } } } else { $Filter = "(&(Name:IgnoreCase=$LDAPPath)$DSM7Structure)" $result = Get-DSM7ObjectList -Filter $Filter if ($result) { $ParentCont = $result.Name $ParentContID = $result.ID } else { $ParentContID = 0 } } return $ParentContID } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function New-DSM7Object { [CmdletBinding()] param ( [system.string]$Name, [system.string]$Description, [int]$ParentContID, [system.string]$SchemaTag, $PropGroupList, [system.string]$GroupType = "Object", [system.string]$UniqueID ) try { $Webrequest = Get-DSM7RequestHeader -action "CreateObject" $Webrequest.NewObject = New-Object $DSM7Types["MdsObject"] $Webrequest.NewObject.SchemaTag = $SchemaTag $Webrequest.NewObject.Name = $Name if ($DSM7Version -gt "7.4.0") { $Webrequest.NewObject.GenTypeData = new-object $DSM7Types["MdsGenType"] $CreationSource = $MyInvocation.MyCommand.Module.Name if ($DSM7CreationSource) {$CreationSource = $DSM7CreationSource} $Webrequest.NewObject.GenTypeData.CreationSource = $CreationSource } $Webrequest.NewObject.Description = $Description if ($SchemaTag -eq "ExternalGroup" ) { $Webrequest.NewObject.IdProvider = "AD" $Webrequest.NewObject.UniqueID = $UniqueID } $Webrequest.NewObject.PropGroupList = $PropGroupList $Webrequest.NewObject.ParentContID = $ParentContID $Webrequest.NewObject.GroupType = $GroupType $Webresult = $DSM7WebService.CreateObject($Webrequest).CreatedObject Write-Log 0 "($Name) erfolgreich." $MyInvocation.MyCommand return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function New-DSM7InfrastructureJob { [CmdletBinding()] param ( [system.string]$SchemaTag, $PropGroupList, [system.string]$GroupType = "Object" ) try { $Webrequest = Get-DSM7RequestHeader -action "CreateInfrastructureJob" $Webrequest.JobDefinition = New-Object $DSM7Types["MdsObject"] $Webrequest.JobDefinition.SchemaTag = $SchemaTag $Webrequest.JobDefinition.Name = $DSM7CreationSource $Webrequest.JobDefinition.PropGroupList = $PropGroupList $Webresult = $DSM7WebService.CreateInfrastructureJob($Webrequest) Write-Log 0 "Job ($SchemaTag) erfolgreich." $MyInvocation.MyCommand return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Remove-DSM7Object { [CmdletBinding()] param ( $Object ) try { $Webrequest = Get-DSM7RequestHeader -action "DeleteObject" $Webrequest.ObjectToDelete = $Object $Webresult = $DSM7WebService.DeleteObject($Webrequest).DeleteObjectResult Write-Log 0 "Loeschen Objekt $($Object.Name) ($($Object.ID)) erfolgreich." $MyInvocation.MyCommand return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Move-DSM7Object { [CmdletBinding()] param ( $Object, $ParentContID ) try { $Webrequest = Get-DSM7RequestHeader -action "MoveObject" $Webrequest.ObjectToMove = $Object $Webrequest.NewParentOrgTreeContainer = Get-DSM7OrgTreeContainerObject -ID $ParentContID $Webresult = $DSM7WebService.MoveObject($Webrequest).MovedObject Write-Log 0 "Verschieben von $($Object.Name) ($($Object.ID)) erfolgreich." $MyInvocation.MyCommand return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } ############################################################################### # DSM7 Funktionen - Association ############################################################################### function Get-DSM7AssociationListObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.string]$SchemaTag, [system.string]$SourceObjectID = "*", [system.string]$TargetObjectID = "*", [system.string]$TargetSchemaTag = "*" ) if (Confirm-Connect) { try { $IDs = @() $ObjectIDs = @() $Filter = "(&(SchemaTag=$SchemaTag)(TargetObjectID=$TargetObjectID)(SourceObjectID=$SourceObjectID)(TargetSchemaTag=$TargetSchemaTag))" $Webrequest = Get-DSM7RequestHeader -action "GetAssociationList" $Webrequest.LdapQuery = "<LDAP://rootDSE>;$Filter;;subtree" $Webrequest.MaxResults = -1 $Webresult = $($DSM7WebService.GetAssociationList($Webrequest)).AssociationList if ($Webresult.count -gt 0) { foreach ($DSM7Object in $Webresult) { $IDs += $DSM7Object.ID } $IDs = $($IDs|sort -Unique) $Webresult = Get-DSM7AssociationsObject -IDs $IDs -SchemaTag $SchemaTag return $Webresult } else { return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } function Get-DSM7AssociationList { <# .SYNOPSIS Gibt eine Liste von Association zurueck. .DESCRIPTION Gibt eine Liste von Association zurueck. .EXAMPLE Get-DSM7AssociationList -SchemaTag "ComputerAssociatedUser" .NOTES .LINK Get-DSM7AssociationList .LINK Get-DSM7AssociationschemaList .LINK New-DSM7Association #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.string]$SchemaTag, [system.string]$SourceObjectID = "*", [system.string]$TargetObjectID = "*", [system.string]$TargetSchemaTag = "*", [switch]$resolvedName = $false ) if (Confirm-Connect) { #workaround not work SchemaList with version 7.4.3 $DSM7AssociationSchemaListCheck = $true if ($DSM7Version -ne "7.4.3.0") { if (!$DSM7AssociationSchemaList) { $global:DSM7AssociationSchemaList = Get-DSM7AssociationschemaList|select -ExpandProperty Tag } if ($DSM7AssociationSchemaList.Contains($SchemaTag)) { $DSM7AssociationSchemaListCheck = $true } else { $DSM7AssociationSchemaListCheck = $false } } if ($DSM7AssociationSchemaListCheck) { $result = Get-DSM7AssociationListObject -SchemaTag $SchemaTag -SourceObjectID $SourceObjectID -TargetObjectID $TargetObjectID -TargetSchemaTag $TargetSchemaTag if ($result) { $result = Convert-DSM7AssociationListtoPSObject -ObjectList $result -resolvedName:$resolvedName Write-Log 0 "Liste von $SchemaTag erfolgreich." $MyInvocation.MyCommand return $result } } else { Write-Log 1 "$SchemaTag nicht vorhanden!!! Bite folgende verwenden ($DSM7AssociationSchemaList)." $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7AssociationList function Get-DSM7AssociationschemaListObject { try { $Webrequest = Get-DSM7RequestHeader -action "GetAssociationSchemaList" $Webrequest.SchemaTags = @() $Webresult = $DSM7WebService.GetAssociationSchemaList($Webrequest).SchemaList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7AssociationschemaList { <# .SYNOPSIS Gibt eine Liste von Association Schemas zurueck. .DESCRIPTION Gibt eine Liste von Association Schemas zurueck. .EXAMPLE Get-DSM7AssociationList .NOTES .LINK Get-DSM7AssociationList .LINK Get-DSM7AssociationschemaList .LINK New-DSM7Association #> [CmdletBinding()] param ( ) if (Confirm-Connect) { $result = Get-DSM7AssociationschemaListObject if ($result) { $result = Convert-DSM7AssociationSchemaListtoPSObjects -DSM7Objects $result Write-Log 0 " Liste von Association Schemas erfolgreich." $MyInvocation.MyCommand } else { Write-Log 1 " Liste von Association Schemas konte nicht ermitteltwerden!" $MyInvocation.MyCommand } return $result } } Export-ModuleMember -Function Get-DSM7AssociationschemaList function Get-DSM7AssociationObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [int]$ID, [Parameter(Position=1, Mandatory=$true)] [system.string]$SchemaTag ) if (Confirm-Connect) { try { $Webrequest = Get-DSM7RequestHeader -action "GetAssociation" $Webrequest.AssociationId = $ID $Webrequest.SchemaTag = $SchemaTag $Webresult = $DSM7WebService.GetAssociation($Webrequest).RetrievedAssociation return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } function Get-DSM7AssociationsObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $IDs , [Parameter(Position=1, Mandatory=$true)] [system.string]$SchemaTag ) try { $IDs = $IDs|Sort-Object|Get-Unique $Webrequest = Get-DSM7RequestHeader -action "GetAssociations" $Webrequest.AssociationIds = $IDs $Webrequest.SchemaTag = $SchemaTag $Webresult = $DSM7WebService.GetAssociations($Webrequest).AssociationList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function New-DSM7AssociationObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.string]$SchemaTag, [Parameter(Position=1, Mandatory=$true)] [Int]$SourceObjectID, [Parameter(Position=2, Mandatory=$true)] [Int]$TargetObjectID, [Parameter(Position=3, Mandatory=$true)] [system.string]$TargetSchemaTag ) try { $Webrequest = Get-DSM7RequestHeader -action "CreateAssociation" $Webrequest.NewAssociation = New-Object $DSM7Types["MdsAssociation"] $Webrequest.NewAssociation.SchemaTag = $SchemaTag $Webrequest.NewAssociation.SourceObjectID = $SourceObjectID $Webrequest.NewAssociation.TargetObjectID = $TargetObjectID $Webrequest.NewAssociation.TargetSchemaTag = $TargetSchemaTag $Webresult = $DSM7WebService.CreateAssociation($Webrequest).CreatedAssociation return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function New-DSM7Association { <# .SYNOPSIS Neue Association wird erstellt. .DESCRIPTION Neue Association wird erstellt. .EXAMPLE New-DSM7Association -SchemaTag "Schema" -SourceObjectID 1234 -TargetSchemaTag "Schema" -TargetObjectID 1234 .NOTES .LINK Get-DSM7AssociationList .LINK Get-DSM7AssociationschemaList .LINK New-DSM7Association #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.string]$SchemaTag, [Parameter(Position=1, Mandatory=$true)] [system.Int32]$SourceObjectID, [Parameter(Position=2, Mandatory=$true)] [system.string]$TargetSchemaTag, [Parameter(Position=3, Mandatory=$true)] [System.Int32]$TargetObjectID ) if (Confirm-Connect) { #workaround not work GetAssociationSchemaList with version 7.4.3 $DSM7AssociationSchemaListCheck = $true if ($DSM7Version -ne "7.4.3.0") { if (!$DSM7AssociationSchemaList) { $global:DSM7AssociationSchemaList = Get-DSM7AssociationschemaList|select -ExpandProperty Tag } if ($DSM7AssociationSchemaList.Contains($SchemaTag)) { $DSM7AssociationSchemaListCheck = $true } else { $DSM7AssociationSchemaListCheck = $false } } if ($DSM7AssociationSchemaListCheck -and $SourceObjectID -gt 0 -and $TargetObjectID -0 -and $TargetSchemaTag) { $result = New-DSM7AssociationObject -SchemaTag $SchemaTag -SourceObjectID $SourceObjectID -TargetObjectID $TargetObjectID -TargetSchemaTag $TargetSchemaTag if ($result) { $result = Convert-DSM7AssociationtoPSObject($result) Write-Log 0 "Neue Association von $SchemaTag erfolgreich." $MyInvocation.MyCommand return $result } } else { Write-Log 1 "$SchemaTag nicht vorhanden!!! Bite folgende verwenden ($DSM7AssociationSchemaList)." $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function New-DSM7Association function New-DSM7AssociationListObject { [CmdletBinding()] param ( [PSObject[]]$Objects ) try { $Webrequest = Get-DSM7RequestHeader -action "CreateAssociationList AssociationListToCreate" $ObjectMdsAssociations = @() foreach ($Object in $Objects) { $ObjectMdsAssociation = New-Object $DSM7Types["MdsAssociation"] $ObjectMdsAssociation.SchemaTag = $Object.SchemaTag $ObjectMdsAssociation.SourceObjectID = $Object.SourceObjectID $ObjectMdsAssociation.TargetObjectID = $Object.TargetObjectID $ObjectMdsAssociation.TargetSchemaTag = $Object.TargetSchemaTag $ObjectMdsAssociations += $ObjectMdsAssociation } $Webrequest.AssociationListToCreate= $ObjectMdsAssociations $Webresult = $DSM7WebService.CreateAssociationList($Webrequest).CreatedListOfAssociations return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Remove-DSM7AssociationObject { [CmdletBinding()] param ( $Object ) try { $Webrequest = Get-DSM7RequestHeader -action "DeleteAssociation" $Webrequest.AssociationToDelete = $Object $Webresult = $DSM7WebService.DeleteAssociation($Webrequest) return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } ############################################################################### # DSM7 Funktionen - NameList ############################################################################### function Get-DSM7DisplayNameListsObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $IDs ) try { $Webrequest = Get-DSM7RequestHeader -action "GetDisplayNameLists" $Webrequest.DisplayNameIds = $IDs $Webresult = $DSM7WebService.GetDisplayNameLists($Webrequest).DisplayNames return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7DisplayNameLists { <# .SYNOPSIS Gibt DisplayNameList zurueck. .DESCRIPTION Gibt DisplayNameList zurueck. .EXAMPLE Get-DSM7GetDisplayNameLists -IDs 1,2,3,4,5 .NOTES .LINK #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $IDs ) if (Confirm-Connect) { try { $result = Get-DSM7DisplayNameListsObject if ($result) { Write-Log 0 "($IDs) erfolgreich." $MyInvocation.MyCommand return $Webresult } else { Write-Log 1 "($IDs) nicht gefunden!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7DisplayNameLists ############################################################################### # DSM7 Funktionen - Computer ############################################################################### function Get-DSM7ComputerList { <# .SYNOPSIS Gibt eine Liste von Computern zurueck. .DESCRIPTION Gibt eine Liste von Computern zurueck. .EXAMPLE Get-DSM7ComputerList -LDAPPath "Managed Users & Computers/OU1/OU2" -recursive .NOTES .LINK Get-DSM7ComputerList .LINK Get-DSM7Computer .LINK Update-DSM7Computer .LINK Install-DSM7Computer .LINK New-DSM7Computer .LINK Remove-DSM7Computer .LINK Move-DSM7Computer #> [CmdletBinding()] param ( [system.string]$Attributes, [system.string]$Filter, [system.string]$LDAPPath = "", [int]$ParentContID, [switch]$GenTypeData = $false, [switch]$recursive = $false ) if (Confirm-Connect) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($recursive) { if ($ParentContID -gt 0) { $result = @() $resultComputer = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(SchemaTag=Computer)$Filter)" -ParentContID $ParentContID -GenTypeData:$GenTypeData if ($resultComputer) { $result += $resultComputer } $resultContainer = Get-DSM7ObjectList -Filter $DSM7Container -ParentContID $ParentContID -recursive foreach ($Container in $resultContainer) { $FilterContainer = "(&(ParentContID=$($Container.ID))(SchemaTag=Computer)$filter)" $resultComputer = Get-DSM7ObjectList -Attributes $Attributes -Filter $FilterContainer if ($resultComputer) { $result += $resultComputer } } } else { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(SchemaTag=Computer)$Filter)" -ParentContID $ParentContID -GenTypeData:$GenTypeData } } else { if ($ParentContID -gt 0) { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(SchemaTag=Computer)$Filter)" -ParentContID $ParentContID -GenTypeData:$GenTypeData } else { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(SchemaTag=Computer)$Filter)" -GenTypeData:$GenTypeData } } if ($result) { return $result } else { return $false } } } Export-ModuleMember -Function Get-DSM7ComputerList function Get-DSM7Computer { <# .SYNOPSIS Gibt das Computerobjekt zurueck. .DESCRIPTION Gibt das Computerobjekt zurueck. .EXAMPLE Get-DSM7Computer -Name "%Computername%" Get-DSM7Computer -ID 1234 Get-DSM7Computer -Name "%Computername%" -LDAPPath "Managed Users & Computers/OU" .NOTES .LINK Get-DSM7ComputerList .LINK Get-DSM7Computer .LINK Update-DSM7Computer .LINK Install-DSM7Computer .LINK New-DSM7Computer .LINK Remove-DSM7Computer .LINK Move-DSM7Computer #> [CmdletBinding()] param ( [system.string]$Name, [int]$ID, [system.string]$LDAPPath, [switch]$LDAP = $false ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0) { if ($ID -eq 0) { $search = Get-DSM7ObjectList -Filter "(Name:IgnoreCase=$Name)(Schematag=Computer)" -LDAPPath $LDAPPath if ($search.Count -lt 2) { $ID = $search.ID } else { Write-Log 1 "($Name) nicht eindeutig bitte LDAPPath benutzen!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { $result = Get-DSM7ObjectObject -ID $ID if ($result) { $result = Convert-DSM7ObjecttoPSObject($result) -LDAP:$LDAP Write-Log 0 "($($result.Name)) erfolgreich." $MyInvocation.MyCommand return $result } else { Write-Log 1 "Computer nicht gefunden!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Computer nicht gefunden!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7Computer function Update-DSM7Computer { <# .SYNOPSIS aendert das Computerobjekt. .DESCRIPTION aendert das Computerobjekt. .EXAMPLE Update-DSM7Computer -Name "%Computername%" -Values @("Computer.AssetTag=Test") .NOTES .LINK Get-DSM7ComputerList .LINK Get-DSM7Computer .LINK Update-DSM7Computer .LINK Install-DSM7Computer .LINK New-DSM7Computer .LINK Remove-DSM7Computer .LINK Move-DSM7Computer #> [CmdletBinding()] param ( [system.string]$Name, [int]$ID, [system.string]$LDAPPath, [string[]]$Values, [switch]$LDAP = $false ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0) { if ($ID -eq 0) { $search = Get-DSM7Computer -Name $Name -LDAPPath $LDAPPath if ($search) { $ID = $search.ID } else { Write-Log 1 "Aenderung kann nicht erfolgen!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { $Computer = Get-DSM7ObjectObject -ID $ID $result = Update-DSM7Object -Object $Computer -Values $Values if ($result) { $result = Convert-DSM7ObjecttoPSObject($result) -LDAP:$LDAP Write-Log 0 "($($Computer.Name)) erfolgreich." $MyInvocation.MyCommand return $result } else { return $false } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Update-DSM7Computer function Reset-DSM7ComputerInstallationOrder { [CmdletBinding()] param ( [int]$ID) try { $Webrequest = Get-DSM7RequestHeader -action "ResetInstallationOrderOfNode" $Webrequest.NodeId = $ID $Webresult = $DSM7WebService.ResetInstallationOrderOfNode($Webrequest).ResetInstallationOrderOfNodeResult Write-Log 0 "Computer ($ID) neue Installationreihenfolge berechnet." $MyInvocation.MyCommand return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Install-DSM7ReinstallComputer { [CmdletBinding()] param ( $Computer , [switch]$StartReinstallImmediately, [switch]$WakeUp, [System.String]$WakeUpTime, [switch]$UpdatePolicyInstancesToPolicyStatus ) try { $Webrequest = Get-DSM7RequestHeader -action "ReinstallComputer" $Webrequest.Computer = $Computer $Webrequest.Options = New-Object $DSM7Types["ReinstallComputerOptions"] $Webrequest.Options.StartReinstallImmediately = $StartReinstallImmediately if ($WakeUp) { $Webrequest.Options.WakeUpForExecutionOptions = New-Object $DSM7Types["WakeUpForExecutionOptions"] $Webrequest.Options.WakeUpForExecutionOptions.WakeUpComputer = $WakeUp if ($WakeUpTime) { $StartDate = $(Get-Date($WakeUpTime)) } else { $StartDate = $(Get-Date) } #$StartDate = $StartDate + [System.TimeZoneInfo]::Local.BaseUtcOffset Write-Log 0 "Start Datum ist:($StartDate)" $MyInvocation.MyCommand $Webrequest.Options.WakeUpForExecutionOptions.ExecutionStartDate = New-Object $DSM7Types["MdsDateTime"] $Webrequest.Options.WakeUpForExecutionOptions.ExecutionStartDate.DateTime = $StartDate $Webrequest.Options.WakeUpForExecutionOptions.ExecutionStartDate.IsLocalTime = $true } $Webrequest.Options.UpdatePolicyInstancesToPolicyStatus = $UpdatePolicyInstancesToPolicyStatus $Webresult = $DSM7WebService.ReinstallComputer($Webrequest).ReinstallComputerResult Write-Log 0 "Computer auf Reinstall gesetzt." $MyInvocation.MyCommand return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Install-DSM7Computer { <# .SYNOPSIS Installiert den Computer neu. .DESCRIPTION Installiert den Computer neu. .EXAMPLE Install-DSM7Computer -Name "%Computername%" -UpgradePolicyInstances -RecalculateInstallationOrder -UpdatePolicyInstancesActive .EXAMPLE Install-DSM7Computer -Name "%Computername%" -WakeUp .NOTES .LINK Get-DSM7ComputerList .LINK Get-DSM7Computer .LINK Update-DSM7Computer .LINK Install-DSM7Computer .LINK New-DSM7Computer .LINK Remove-DSM7Computer .LINK Move-DSM7Computer #> [CmdletBinding()] param ( [system.string]$Name, [system.int32]$ID, [switch]$RecalculateInstallationOrder, [switch]$UpgradePolicyInstances, [switch]$UpdatePolicyInstancesActive, [switch]$WakeUp, [System.string]$WakeupTime ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0) { if ($ID -eq 0) { $search = Get-DSM7Computer -Name $Name if ($search) { $ID = $search.ID } else { Write-Log 1 "Installation kann nicht erfolgen!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { if (!($DSM7Version -gt "7.3.0")) { $result = Update-DSM7Computer -ID $ID -Values @("Computer.OperationMode=2") } else { $result = Update-DSM7Computer -ID $ID -Values @("Computer.OperationMode=0") } if ($RecalculateInstallationOrder) { $result = Reset-DSM7ComputerInstallationOrder -ID $ID } if ($UpgradePolicyInstances) { $result = Upgrade-DSM7PolicyInstancesByNodeObject -NodeId $ID } if ($UpdatePolicyInstancesActive) { $result = Update-DSM7PolicyInstancesActive -ID $ID } if ($DSM7Version -gt "7.3.0") { if (Install-DSM7ReinstallComputer -Computer $(Get-DSM7ObjectObject -ID $ID) -StartReinstallImmediately -UpdatePolicyInstancesToPolicyStatus -WakeUp:$WakeUp -WakeUpTime $WakeupTime) { Write-Log 0 "Computer ($ID) auf Neuinstallation gesetzt." $MyInvocation.MyCommand return $true } } else { if (Update-DSM7Computer -ID $ID -Values @("Computer.OperationMode=1")) { Write-Log 0 "Computer ($ID) auf Neuinstallation gesetzt." $MyInvocation.MyCommand return $true } } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Install-DSM7Computer function Send-DSM7ComputerWakeUP { <# .SYNOPSIS WakeUP (WOL) den Computer. .DESCRIPTION WakeUP (WOL) den Computer. .EXAMPLE WakeUp-DSM7Computer -Name "%Computername%" .NOTES .LINK Get-DSM7ComputerList .LINK Get-DSM7Computer .LINK Update-DSM7Computer .LINK Install-DSM7Computer .LINK New-DSM7Computer .LINK Remove-DSM7Computer .LINK Move-DSM7Computer .LINK WakeUp-DSM7Computer #> [CmdletBinding()] param ( [system.string]$Name, [system.int32]$ID ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0) { if ($ID -eq 0) { $search = Get-DSM7Computer -Name $Name if ($search) { $ID = $search.ID } else { return $false } } if ($ID -gt 0) { $PropGroupList = @() $computerIdProperty = New-Object $DSM7Types["MdsTypedPropertyOfNullableOfInt32"] $computerIdProperty.Tag = "ComputerId" $computerIdProperty.Type = "ObjectLink" $computerIdProperty.TypedValue = $ID $computerRelatedJobPropGroup = New-Object $DSM7Types["MdsPropGroup"] $computerRelatedJobPropGroup.Tag = "ComputerRelatedJob"; $computerRelatedJobPropGroup.PropertyList = @() $computerRelatedJobPropGroup.PropertyList += $computerIdProperty; $PropGroupList += $computerRelatedJobPropGroup $result = New-DSM7InfrastructureJob -PropGroupList $PropGroupList -SchemaTag "WakeUpOnLanJob" if ($result) { Write-Log 0 "WOL erfolgreich versendet." $MyInvocation.MyCommand return $true } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Set-Alias WakeUp-DSM7Computer Send-DSM7ComputerWakeUP Export-ModuleMember -Function Send-DSM7ComputerWakeUP -Alias WakeUp-DSM7Computer function New-DSM7Computer { <# .SYNOPSIS Legt ein neues Computerobjekt an. .DESCRIPTION Legt ein neues Computerobjekt an. .EXAMPLE New-DSM7Computer -Name "%Computername%" -LDAPPath "Managed Users & Computers/OU1/OU2" -InitialMACAddress "012345678912" -Values @("Computer.ComputerType=Server","Description=Test123") .NOTES .LINK Get-DSM7ComputerList .LINK Get-DSM7Computer .LINK Update-DSM7Computer .LINK Install-DSM7Computer .LINK New-DSM7Computer .LINK Remove-DSM7Computer .LINK Move-DSM7Computer #> [CmdletBinding()] param ( [system.string]$Name, [system.string]$LDAPPath, [int]$ParentContID, [string[]]$Values, [system.string]$InitialMACAddress ) if (Confirm-Connect) { try { $result = Get-DSM7ComputerList -Filter "(BasicInventory.InitialMACAddress:IgnoreCase=$InitialMACAddress)" if (!$result) { $SchemaTag = "Computer" if ($ParentContID -eq 0) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } $result = New-DSM7Object -Name $Name -ParentContID $ParentContID -SchemaTag $SchemaTag $Values += "BasicInventory.InitialMACAddress="+$InitialMACAddress $result = Update-DSM7Object -Object $result -Values $Values if ($result) { $result = Convert-DSM7ObjecttoPSObject($result) -LDAP Write-Log 0 "($Name) erfolgreich in OU ($($result.LDAPPath))." $MyInvocation.MyCommand return $result } else { return $false } } else { Write-Log 1 "Computer mit MAC ($InitialMACAddress) existiert schon!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function New-DSM7Computer function Remove-DSM7Computer { <# .SYNOPSIS Loescht ein Computerobjekt. .DESCRIPTION Loescht ein Computerobjekt. .EXAMPLE Remove-DSM7Computer -Name "%Computername%" .EXAMPLE Remove-DSM7Computer -InitialMACAddress "012345678912" .NOTES .LINK Get-DSM7ComputerList .LINK Get-DSM7Computer .LINK Update-DSM7Computer .LINK Install-DSM7Computer .LINK New-DSM7Computer .LINK Remove-DSM7Computer .LINK Move-DSM7Computer #> [CmdletBinding()] param ( [system.string]$Name = "*", [int]$ID, [system.string]$LDAPPath, [system.string]$InitialMACAddress = "*" ) if (Confirm-Connect) { try { if ($Name -ne "*" -or $InitialMACAddress -ne "*" -or $ID -gt 0) { if ($ID -eq 0) { $search = Get-DSM7ComputerList -Filter "(&(BasicInventory.InitialMACAddress:IgnoreCase=$InitialMACAddress)(Name:IgnoreCase=$Name))" -LDAPPath $LDAPPath if ($search.Count -lt 2) { $ID = $search.ID } else { Write-Log 1 "Loeschen kann nicht erfolgen! Bitte LDAPPath benutzen." $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { $Computer = Get-DSM7ObjectObject -ID $ID $result = Remove-DSM7Object -Object $Computer Write-Log 0 "Computer ($($Computer.Name)) geloescht." $MyInvocation.MyCommand return $true } else { Write-Log 1 "Computer nicht gefunden!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Remove-DSM7Computer function Move-DSM7Computer { <# .SYNOPSIS Verschiebt ein Computerobjekt. .DESCRIPTION Verschiebt ein Computerobjekt. .EXAMPLE Move-DSM7Computer -Name "%Computername%" -toLDAPPath "Managed Users & Computers/OU1/OU2" .NOTES .LINK Get-DSM7ComputerList .LINK Get-DSM7Computer .LINK Update-DSM7Computer .LINK Install-DSM7Computer .LINK New-DSM7Computer .LINK Remove-DSM7Computer .LINK Move-DSM7Computer #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.string]$toLDAPPath, [Parameter(Position=4, Mandatory=$false)] [Int]$toLDAPPathID ) if (Confirm-Connect) { try { if (($Name -or $ID -gt 0) -and ($toLDAPPath -or $toLDAPPathID -gt 0) ) { if ($ID -eq 0) { $search = Get-DSM7Computer -Name $Name -LDAPPath $LDAPPath if ($search) { $ID = $search.ID } else { Write-Log 1 "Computer kann nicht nach ($toLDAPPath) verschoben werden!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { if ($toLDAPPathID -gt 0) { $ParentContID = $toLDAPPathID } else { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $toLDAPPath } $Object = Get-DSM7ObjectObject -ID $ID if ($Object) { if ($Object.ParentContID -eq $ParentContID) { Write-Log 1 "Computer ($Name) befindet sich schon in ($($Object.ParentContID)." $MyInvocation.MyCommand return $false } else { $result = Move-DSM7Object -Object $Object -ParentContID $ParentContID if ($result) { $result = Convert-DSM7ObjecttoPSObject($result) Write-Log 0 "Computer ($($result.Name)) erfolgreich nach ($($result.ParentContID)) verschoben." $MyInvocation.MyCommand return $true } else { return $false } } } else { Write-Log 1 "Computer kann nicht nach ($toLDAPPath$toLDAPPathID) verschoben werden." $MyInvocation.MyCommand } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Move-DSM7Computer ############################################################################### # DSM7 Funktionen - OrgObjekte function Get-DSM7OrgTreeContainerObject { [CmdletBinding()] param ( [int]$ID ) try { $Webrequest = Get-DSM7RequestHeader -action "GetOrgTreeContainer" $Webrequest.OrgTreeContainerId = $ID $Webresult = $DSM7WebService.GetOrgTreeContainer($Webrequest).RetrievedOrgTreeContainer return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7OrgTreeContainer { <# .SYNOPSIS Gibt ein Containerobjekt zurueck. .DESCRIPTION Gibt ein Containerobjekt zurueck. .EXAMPLE Get-DSM7OrgTreeContainer -LDAPPATH "Global Software Library" .NOTES .LINK Get-DSM7OrgTreeContainer .LINK New-DSM7OrgTreeContainer .LINK Move-DSM7OrgTreeContainer .LINK Remove-DSM7OrgTreeContainer .LINK Update-DSM7OrgTreeContainer #> [CmdletBinding()] param ( [system.string]$LDAPPath, [int]$ID ) if (Confirm-Connect) { try { if ($ID -eq 0) { $ID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } $result = Get-DSM7OrgTreeContainerObject -ID $ID if ($result) { Write-Log 0 "($LDAPPath) -> ($ID) erfolgreich." $MyInvocation.MyCommand $result = Convert-DSM7ObjecttoPSObject($result) -LDAP return $result } else { Write-Log 1 "Konnte kein Object finden!" $MyInvocation.MyCommand } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7OrgTreeContainer function Get-DSM7OrgTreeContainersObject { [CmdletBinding()] param ( [System.Array]$IDs ) try { $Webrequest = Get-DSM7RequestHeader -action "GetOrgTreeContainers" $Webrequest.OrgTreeContainerIds = $IDs $Webresult = $DSM7WebService.GetOrgTreeContainers($Webrequest).OrgTreeContainerList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7OrgTreeContainers { <# .SYNOPSIS Gibt ein Containerobjekt zurueck. .DESCRIPTION Gibt ein Containerobjekt zurueck. .EXAMPLE Get-DSM7OrgTreeContainers -IDs (xxx,yyy) .NOTES .LINK Get-DSM7OrgTreeContainer .LINK New-DSM7OrgTreeContainer .LINK Move-DSM7OrgTreeContainer .LINK Remove-DSM7OrgTreeContainer .LINK Update-DSM7OrgTreeContainer #> [CmdletBinding()] param ( [System.Array]$IDs ) if (Confirm-Connect) { try { $result = Get-DSM7OrgTreeContainersObject -IDs $IDs if ($result) { Write-Log 0 "($IDs) erfolgreich." $MyInvocation.MyCommand $result = Convert-DSM7ObjectListtoPSObject($result) return $result } else { Write-Log 1 "Konnte kein Object finden!" $MyInvocation.MyCommand } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7OrgTreeContainers function New-DSM7OrgTreeContainerObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$Description, [Parameter(Position=2, Mandatory=$false)] [system.string]$SchemaTag = "OU", [Parameter(Position=3, Mandatory=$true)] [system.string]$ParentContID ) try { $Webrequest = Get-DSM7RequestHeader -action "CreateOrgTreeContainer" $Webrequest.NewOrgTreeContainer = New-Object $DSM7Types["MdsOrgTreeContainer"] $Webrequest.NewOrgTreeContainer.Name = $Name $Webrequest.NewOrgTreeContainer.SchemaTag = $SchemaTag $Webrequest.NewOrgTreeContainer.Description = $Description $Webrequest.NewOrgTreeContainer.ParentContID = $ParentContID if ($DSM7Version -gt "7.4.0") { $Webrequest.NewOrgTreeContainer.GenTypeData = new-object $DSM7Types["MdsGenType"] $CreationSource = $MyInvocation.MyCommand.Module.Name if ($DSM7CreationSource) {$CreationSource = $DSM7CreationSource} $Webrequest.NewOrgTreeContainer.GenTypeData.CreationSource = $CreationSource } $Webresult = $DSM7WebService.CreateOrgTreeContainer($Webrequest).CreatedOrgTreeContainer Write-Log 0 "($($Webresult.Name)) ($($Webresult.ID)) erfolgreich." $MyInvocation.MyCommand return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function New-DSM7OrgTreeContainer { <# .SYNOPSIS Erstellt ein Containerobjekt. .DESCRIPTION Erstellt ein Containerobjekt. .EXAMPLE New-DSM7OrgTreeContainer -Name "OU2" -LDAPPATH "Managed Users & Computers/OU1" .NOTES .LINK Get-DSM7OrgTreeContainer .LINK New-DSM7OrgTreeContainer .LINK Move-DSM7OrgTreeContainer .LINK Remove-DSM7OrgTreeContainer .LINK Update-DSM7OrgTreeContainer #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true, HelpMessage = "Name der OU")] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$Description, [Parameter(Position=2, Mandatory=$false)] [ValidateSet("OU","Domain","CitrixFarm","CitrixZone","SwFolder")] [system.string]$SchemaTag = "OU", [Parameter(Position=3, Mandatory=$true)] [system.string]$LDAPPath ) if (Confirm-Connect) { try { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath $result = New-DSM7OrgTreeContainerObject -Name $Name -Description $Description -SchemaTag $SchemaTag -ParentContID $ParentContID if ($result) { Write-Log 0 "($Name) ($LDAPPath) erfolgreich erstellt." $MyInvocation.MyCommand $result = Convert-DSM7ObjecttoPSObject($result) -LDAP return $result } else { Write-Log 1 "Kein Objekt erzeugt!" $MyInvocation.MyCommand } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function New-DSM7OrgTreeContainer function Move-DSM7OrgTreeContainerObject { [CmdletBinding()] param ( $Object, [system.string]$ParentContID ) try { $ParentContObject = Get-DSM7OrgTreeContainerObject -ID $ParentContID $Webrequest = Get-DSM7RequestHeader -action "MoveOrgTreeContainer" $Webrequest.OrgTreeContainerToMove = $Object $Webrequest.NewParentOrgTreeContainer = $ParentContObject $Webresult = $DSM7WebService.MoveOrgTreeContainer($Webrequest).MovedOrgTreeContainer Write-Log 0 "($Name) ($($Webresult.ID)) erfolgreich." $MyInvocation.MyCommand return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Move-DSM7OrgTreeContainer { <# .SYNOPSIS Verschiebt ein Containerobjekt. .DESCRIPTION Verschiebt ein Containerobjekt. .EXAMPLE Move-DSM7OrgTreeContainer -Name "OU2" -toLDAPPath "Managed Users & Computers/OU1" .NOTES .LINK Get-DSM7OrgTreeContainer .LINK New-DSM7OrgTreeContainer .LINK Move-DSM7OrgTreeContainer .LINK Remove-DSM7OrgTreeContainer .LINK Update-DSM7OrgTreeContainer #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=3, Mandatory=$true)] [system.string]$toLDAPPath ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0) { if ($ID -eq 0) { $search = Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$Name)$DSM7Structure)" -LDAPPath $LDAPPath if ($search) { $ID = $search.ID } else { Write-Log 1 "Container nicht gefunden, kann nicht nach ($toLDAPPath) verschoben werden!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { $Object = Get-DSM7OrgTreeContainerObject -ID $ID if ($Object) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $toLDAPPath if ($ParentContID) { $result = Move-DSM7OrgTreeContainerObject -Object $Object -ParentContID $ParentContID if ($result) { Write-Log 0 "($($Object.Name)) ($toLDAPPath) erfolgreich verschoben." $MyInvocation.MyCommand $result = Convert-DSM7ObjecttoPSObject($result) -LDAP return $result } else { Write-Log 1 "($($Object.Name)) ($toLDAPPath) konnte nicht ausgefuehrt werden." $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Ziel Container ($LDAPPATH) nicht vorhanden." $MyInvocation.MyCommand return $false } } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Move-DSM7OrgTreeContainer function Update-DSM7OrgTreeContainerObject { [CmdletBinding()] param ( $Object ) try { $Webrequest = Get-DSM7RequestHeader -action "UpdateOrgTreeContainer" $Webrequest.OrgTreeContainerToUpdate = $Object $Webresult = $DSM7WebService.UpdateOrgTreeContainer($Webrequest).UpdatedOrgTreeContainer Write-Log 0 "($Name) ($($Webresult.ID)) erfolgreich." $MyInvocation.MyCommand return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Update-DSM7OrgTreeContainer { <# .SYNOPSIS aendert ein Containerobjekt. .DESCRIPTION aendert ein Containerobjekt. .EXAMPLE Update-DSM7OrgTreeContainer -Name "OU2" -Description "OU" -LDAPPath "Managed Users & Computers/OU1" .NOTES .LINK Get-DSM7OrgTreeContainer .LINK New-DSM7OrgTreeContainer .LINK Move-DSM7OrgTreeContainer .LINK Remove-DSM7OrgTreeContainer .LINK Update-DSM7OrgTreeContainer #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$Description, [Parameter(Position=3, Mandatory=$false)] [system.string]$LDAPPath ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0) { if ($ID -eq 0) { $search = Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$Name)$DSM7Structure)" -LDAPPath $LDAPPath if ($search.Count -lt 2) { $ID = $search.ID } else { Write-Log 1 "Container nicht gefunden, kann nicht geaendert werden!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { $Object = Get-DSM7OrgTreeContainerObject -ID $ID if ($Object) { if ($Description) { $Object.Description = $Description } $result = Update-DSM7OrgTreeContainerObject -Object $Object if ($result) { Write-Log 0 "($($Object.Name)) ($LDAPPath) erfolgreich geaendert." $MyInvocation.MyCommand $result = Convert-DSM7ObjecttoPSObject($result) -LDAP return $result } else { Write-Log 1 "($($Object.Name)) ($LDAPPath) konnte nicht ausgefuehrt werden." $MyInvocation.MyCommand return $false } } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Update-DSM7OrgTreeContainer function Remove-DSM7OrgTreeContainerObject { [CmdletBinding()] param ( $Object ) try { $Webrequest = Get-DSM7RequestHeader -action "DeleteOrgTreeContainer" $Webrequest.OrgTreeContainerToDelete = $Object $Webresult = $DSM7WebService.DeleteOrgTreeContainer($Webrequest).DeleteOrgTreeContainerResult Write-Log 0 "($Name) ($($Object.ID)) erfolgreich." $MyInvocation.MyCommand return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Remove-DSM7OrgTreeContainer { <# .SYNOPSIS Loescht ein Containerobjekt. .DESCRIPTION Loescht ein Containerobjekt. .EXAMPLE Remove-DSM7OrgTreeContainer -Name "OU2" -LDAPPath "Managed Users & Computers/OU1" .NOTES .LINK Get-DSM7OrgTreeContainer .LINK New-DSM7OrgTreeContainer .LINK Move-DSM7OrgTreeContainer .LINK Remove-DSM7OrgTreeContainer .LINK Update-DSM7OrgTreeContainer #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0) { if ($ID -eq 0) { $search = Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$Name)$DSM7Structure)" -LDAPPath $LDAPPath if ($search -and $search.Count -le 2) { $ID = $search.ID } else { Write-Log 1 "Container nicht gefunden, kann nicht geloescht werden!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { $Object = Get-DSM7OrgTreeContainerObject -ID $ID if ($Object) { $result = Remove-DSM7OrgTreeContainerObject -Object $Object if ($result) { Write-Log 0 "($Name) ($LDAPPath) erfolgreich geloescht." $MyInvocation.MyCommand $result = Convert-DSM7ObjecttoPSObject($result) -LDAP return $result } else { Write-Log 1 "($Name) ($LDAPPath) konnte nicht ausgefuehrt werden." $MyInvocation.MyCommand return $false } } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Remove-DSM7OrgTreeContainer ############################################################################### # DSM7 Funktionen - Groups function Get-DSM7Group { <# .SYNOPSIS Gibt ein Gruppenobjekt zurueck. .DESCRIPTION Gibt ein Gruppenobjekt zurueck. .EXAMPLE Get-DSM7Group -Name "Gruppe" -LDAPPath "Managed Users & Computers/OU1" .EXAMPLE Get-DSM7Group -Name "Gruppe" -ParentDynGroup "Gruppe" .NOTES .LINK Get-DSM7Group .LINK Get-DSM7GroupList .LINK New-DSM7Group .LINK Move-DSM7Group .LINK Update-DSM7Group .LINK Remove-DSM7Group .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Add-DSM7ComputerToGroup .LINK Remove-DSM7ComputerFromGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.string]$ParentContID, [Parameter(Position=4, Mandatory=$false)] [system.string]$ParentDynGroup, [Parameter(Position=5, Mandatory=$false)] [system.string]$ParentDynGroupID, [Parameter(Position=6, Mandatory=$false)] [system.string]$ADSID ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0 -or $ADSID) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($ID -eq 0) { if ($ParentDynGroup) { if ($ParentDynGroup) { $ParentDynGroupID = (Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$ParentDynGroup)(Schematag=DynamicGroup))" -ParentContID $ParentContID).ID } if ($ParentDynGroupObject.Count -le 2) { $Filter = "(&(Name:IgnoreCase=$Name)(Schematag=DynamicGroup)(DynamicGroupProps.ParentDynGroupId=$ParentDynGroupID))" } else { $Filter = "(&(Name:IgnoreCase=$Name)(Schematag=DynamicGroup))" } } else { $Filter = "(&(Name:IgnoreCase=$Name)(|(Schematag=Group)(Schematag=DynamicGroup)(Schematag=ExternalGroup)))" } if ($ADSID) { $Filter = "(Uniqueid=$ADSID)" } $search = Get-DSM7ObjectList -Filter $Filter -ParentContID $ParentContID if ($search -and $search.Count -le 1) { $ID = $search.ID } else { Write-Log 1 "Gruppe nicht gefunden!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { $Object = Get-DSM7ObjectObject -ID $ID if ($Object) { $result = Convert-DSM7ObjectListtoPSObject($Object) Write-Log 0 "($($Object.Name)) erfolgreich." $MyInvocation.MyCommand return $result } else { Write-Log 1 "($ID) nicht gefunden!" $MyInvocation.MyCommand return $false } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7Group function Get-DSM7GroupList { <# .SYNOPSIS Gibt eine Liste von Gruppen zurueck. .DESCRIPTION Gibt eine Liste von Gruppen zurueck. .EXAMPLE Get-DSM7GroupList -LDAPPath "Managed Users & Computers/OU1/OU2" -recursive .NOTES .LINK Get-DSM7Group .LINK Get-DSM7GroupList .LINK New-DSM7Group .LINK Move-DSM7Group .LINK Update-DSM7Group .LINK Remove-DSM7Group .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Add-DSM7ComputerToGroup .LINK Remove-DSM7ComputerFromGroup #> [CmdletBinding()] param ( [ValidateSet("Group","DynamicGroup","ExternalGroup")] [system.string]$SchemaTag, [system.string]$Attributes, [system.string]$Filter, [system.string]$LDAPPath = "", [int]$ParentContID, [switch]$GenTypeData = $false, [switch]$recursive = $false ) if (Confirm-Connect) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($SchemaTag) { $Filter = "(SchemaTag=$SchemaTag)$Filter" } $Filter = "(&(|(BasePropGroupTag=Group)(BasePropGroupTag=ExternalGroup))$Filter)" $Attributes = "$Attributes,DynamicGroupProps.Filter,DynamicGroupProps.IsComplex,DynamicGroupProps.ParentDynGroupId,Group.TargetCategory" $Attributes = $Attributes.TrimStart(",") if ($recursive) { if ($ParentContID -gt 0) { $result = @() $resultComputer = Get-DSM7ObjectList -Attributes $Attributes -Filter $Filter -ParentContID $ParentContID -GenTypeData:$GenTypeData if ($resultComputer) { $result += $resultComputer } $resultContainer = Get-DSM7ObjectList -Filter $DSM7Container -ParentContID $ParentContID -recursive foreach ($Container in $resultContainer) { $FilterContainer = "(&(ParentContID=$($Container.ID))$filter)" $resultComputer = Get-DSM7ObjectList -Attributes $Attributes -Filter $FilterContainer if ($resultComputer) { $result += $resultComputer } } } else { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter $Filter -ParentContID $ParentContID -GenTypeData:$GenTypeData } } else { if ($ParentContID -gt 0) { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter $Filter -ParentContID $ParentContID -GenTypeData:$GenTypeData } else { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter $Filter -GenTypeData:$GenTypeData } } if ($result) { return $result } else { return $false } } } Export-ModuleMember -Function Get-DSM7GroupList function New-DSM7Group { <# .SYNOPSIS Erstellt ein Gruppenobjekt. .DESCRIPTION Erstellt ein Gruppenobjekt. .EXAMPLE New-DSM7Group -Name "Gruppe" -SchemaTag "DynamicGroup" -LDAPPath "Managed Users & Computers/OU1" -DynamicGroupFilter "(Name=Test)" .EXAMPLE New-DSM7Group -Name "Gruppe" -SchemaTag "ExternalGroup" -LDAPPath "Managed Users & Computers/Server managed/OU1" -ADSID "S-1-5-21-xxxx" .EXAMPLE New-DSM7Group -Name "Gruppe" -Typ "User" -LDAPPath "Managed Users & Computers/OU1" .NOTES .LINK Get-DSM7Group .LINK New-DSM7Group .LINK Move-DSM7Group .LINK Update-DSM7Group .LINK Remove-DSM7Group .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$Description, [Parameter(Position=2, Mandatory=$false)] [ValidateSet("Group","DynamicGroup","ExternalGroup")] [system.string]$SchemaTag = "Group", [Parameter(Position=3, Mandatory=$false)] [ValidateSet("Computer","User")] [system.string]$Typ = "Computer", [Parameter(Position=4, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=4, Mandatory=$false)] [system.string]$ParentContID, [Parameter(Position=5, Mandatory=$false)] [system.string]$ParentDynGroup, [Parameter(Position=6, Mandatory=$false)] [int]$ParentDynGroupID, [Parameter(Position=7, Mandatory=$false)] [system.string]$DynamicGroupFilter, [Parameter(Position=7, Mandatory=$false)] [system.string]$ADSID ) if (Confirm-Connect) { try { $CreateGroup = $false if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($ParentContID -gt 0) { $PropGroupList = @() switch ($SchemaTag) { "DynamicGroup" { if ($DynamicGroupFilter) {$CreateGroup = $true} $PropertyList = @() $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfString"] $PropertyListObject.Tag = "TargetCategory" $PropertyListObject.Type = "Option" $PropertyListObject.TypedValue = $Typ $PropertyList += $PropertyListObject $PropGroupListObject = New-Object $DSM7Types["MdsPropGroup"] $PropGroupListObject.Tag = "Group" $PropGroupListObject.PropertyList = $PropertyList $PropGroupList += $PropGroupListObject $PropertyList = @() $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfString"] $PropertyListObject.Tag = "Filter" $PropertyListObject.Type = "String" $PropertyListObject.TypedValue = $DynamicGroupFilter $PropertyList += $PropertyListObject if ($ParentDynGroup -or $ParentDynGroupID) { if ($ParentDynGroup) { $search = Get-DSM7Group -Name $ParentDynGroup -LDAPPath $LDAPPath if ($search.Count -lt 2) { $ParentDynGroupID = $search.ID } else { $CreateGroup = $false Write-Log 2 "Uebergeordnete Gruppe nicht eindeutig, bitte ID benutzen!!!" $MyInvocation.MyCommand } } if ($ParentDynGroupID -gt 0) { $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfNullableOfInt32"] $PropertyListObject.Tag = "ParentDynGroupId" $PropertyListObject.Type = "HierarchicalObjectLink" $PropertyListObject.TypedValue = $ParentDynGroupID $PropertyList += $PropertyListObject } } $PropGroupListObject = New-Object $DSM7Types["MdsPropGroup"] $PropGroupListObject.Tag = "DynamicGroupProps" $PropGroupListObject.PropertyList = $PropertyList $PropGroupList += $PropGroupListObject } "ExternalGroup" { if ($ADSID) {$CreateGroup = $true} } "Group" { $CreateGroup = $true $PropertyList = @() $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfString"] $PropertyListObject.Tag = "TargetCategory" $PropertyListObject.Type = "Option" $PropertyListObject.TypedValue = $Typ $PropertyList += $PropertyListObject $PropGroupListObject = New-Object $DSM7Types["MdsPropGroup"] $PropGroupListObject.Tag = "Group" $PropGroupListObject.PropertyList = $PropertyList $PropGroupList += $PropGroupListObject } default {} } if ($CreateGroup) { $Object = New-DSM7Object -Name $Name -ParentContID $ParentContID -PropGroupList $PropGroupList -SchemaTag $SchemaTag -UniqueID $ADSID if ($Object) { Write-Log 0 "Gruppe ($Name) wurde erstellt." $MyInvocation.MyCommand $Object = Convert-DSM7ObjectListtoPSObject($Object) return $Object } else { Write-Log 1 "Gruppe konnte nicht erstellt werden!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Gruppen kann nicht erstellt werden!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "LDAPPath nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function New-DSM7Group function Update-DSM7Group { <# .SYNOPSIS Aendert ein Gruppenobjekt. .DESCRIPTION Aendert ein Gruppenobjekt. .EXAMPLE Update-DSM7Group -Name "Gruppe" -LDAPPath "Managed Users & Computers/OU1" -DynamicGroupFilter "(Name=Test)" .NOTES .LINK Get-DSM7Group .LINK New-DSM7Group .LINK Move-DSM7Group .LINK Update-DSM7Group .LINK Remove-DSM7Group .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$Description, [Parameter(Position=2, Mandatory=$false)] [int]$ID, [Parameter(Position=3, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.string]$ParentContID, [Parameter(Position=4, Mandatory=$false)] [system.string]$ParentDynGroup, [Parameter(Position=5, Mandatory=$false)] [int]$ParentDynGroupID, [Parameter(Position=6, Mandatory=$false)] [system.string]$DynamicGroupFilter, [Parameter(Position=7, Mandatory=$false)] [system.string]$ADSID, [Parameter(Position=8, Mandatory=$false)] [system.string]$NewName ) if (Confirm-Connect) { try { $Values = @() if ($Name -or $ID -gt 0) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($ID -eq 0) { $Group = Get-DSM7Group -Name $Name -ParentContID $ParentContID -ParentDynGroup $ParentDynGroup if ($Group) { $ID = $Group.ID } } $Group = Get-DSM7ObjectObject -ID $ID if ($Group) { switch ($Group.SchemaTag) { "DynamicGroup" { if ($DynamicGroupFilter) { $Values += "DynamicGroupProps.Filter="+$DynamicGroupFilter } } "ExternalGroup" { if ($ADSID) { $Group.UniqueID = $ADSID } } "Group" { } default {} } if ($Description) { $Group.Description = $Description } if ($NewName) { $Group.Name = $NewName } $Object = Update-DSM7Object -Object $Group -Values $Values if ($Object) { Write-Log 0 "Gruppe ($($Object.Name)) wurde geaendert." $MyInvocation.MyCommand $Object = Convert-DSM7ObjectListtoPSObject($Object) return $Object } else { Write-Log 1 "Gruppe konnte nicht geaendert werden!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "LDAPPath nicht angegeben!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Update-DSM7Group function Move-DSM7Group { <# .SYNOPSIS Verschiebt ein Gruppenobjekt. .DESCRIPTION Verschiebt ein Gruppenobjekt. .EXAMPLE Move-DSM7Group -Name "Gruppe" -LDAPPath "Managed Users & Computers/OU1" -toLDAPPath "Managed Users & Computers/OU2" .NOTES .LINK Get-DSM7Group .LINK New-DSM7Group .LINK Move-DSM7Group .LINK Update-DSM7Group .LINK Remove-DSM7Group .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=2, Mandatory=$false)] [int]$ID, [Parameter(Position=3, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.string]$ParentContID, [Parameter(Position=3, Mandatory=$false)] [system.string]$toLDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.string]$toParentContID, [Parameter(Position=4, Mandatory=$false)] [system.string]$ParentDynGroup, [Parameter(Position=5, Mandatory=$false)] [int]$ParentDynGroupID ) if (Confirm-Connect) { try { $Values = @() if ($Name -or $ID -gt 0) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($toLDAPPath) { $toParentContID = Get-DSM7LDAPPathID -LDAPPath $toLDAPPath } if ($ParentDynGroup) { $ParentDynGroupID = Get-DSM7Group -Name $ParentDynGroup } if ($ID -eq 0) { $Group = Get-DSM7Group -Name $Name -ParentContID $ParentContID -ParentDynGroup $ParentDynGroup -ParentDynGroupID $ParentDynGroupID if ($Group) { $ID = $Group.ID } } $Group = Get-DSM7ObjectObject -ID $ID if ($Group) { if ($Group.ParentContID -ne $toParentContID) { $result = Move-DSM7Object -Object $Group -ParentContID $toParentContID if ($ParentDynGroupID) { $result = Update-DSM7Group -ID $Group.ID -ParentDynGroupID $ParentDynGroupID } if ($result) { Write-Log 0 "Gruppe verschoben nach $toParentContID." $MyInvocation.MyCommand return $true } else { Write-Log 1 "Gruppe nicht verschoben, ein Fehler aufgetreten!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Gruppe nicht verschoben, befindet sich schon an dieser Stelle." $MyInvocation.MyCommand } } } else { Write-Log 1 "Name oder ID fehlt!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Move-DSM7Group function Remove-DSM7Group { <# .SYNOPSIS Loescht ein Gruppenobjekt. .DESCRIPTION Loescht ein Gruppenobjekt. .EXAMPLE Remove-DSM7Group -Name "Gruppe" -LDAPPath "Managed Users & Computers/OU1" .EXAMPLE Remove-DSM7Group -Name "Gruppe" -ParentDynGroup "Gruppe" .NOTES .LINK Get-DSM7Group .LINK New-DSM7Group .LINK Move-DSM7Group .LINK Update-DSM7Group .LINK Remove-DSM7Group .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Add-DSM7ComputerToGroup .LINK Remove-DSM7ComputerFromGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.string]$ParentContID, [Parameter(Position=4, Mandatory=$false)] [system.string]$ParentDynGroup, [Parameter(Position=5, Mandatory=$false)] [system.string]$ParentDynGroupID, [Parameter(Position=6, Mandatory=$false)] [system.string]$ADSID ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0 -or $ADSID) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($ID -eq 0) { if ($ParentDynGroup) { if ($ParentDynGroup) { $ParentDynGroupID = (Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$ParentDynGroup)(Schematag=DynamicGroup))" -ParentContID $ParentContID).ID } if ($ParentDynGroupObject.Count -le 2) { $Filter = "(&(Name:IgnoreCase=$Name)(Schematag=DynamicGroup)(DynamicGroupProps.ParentDynGroupId=$ParentDynGroupID))" } else { $Filter = "(&(Name:IgnoreCase=$Name)(Schematag=DynamicGroup))" } } else { $Filter = "(&(Name:IgnoreCase=$Name)(|(Schematag=Group)(Schematag=DynamicGroup)(Schematag=ExternalGroup)))" } if ($ADSID) { $Filter = "(Uniqueid=$ADSID)" } $search = Get-DSM7ObjectList -Filter $Filter -ParentContID $ParentContID if ($search -and $search.Count -le 1) { $ID = $search.ID } else { Write-Log 1 "Gruppe nicht gefunden!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { $Object = Get-DSM7ObjectObject -ID $ID if ($Object) { $result = Remove-DSM7Object -Object $Object Write-Log 0 "($($Object.Name)) erfolgreich geloescht." $MyInvocation.MyCommand return $result } else { Write-Log 1 "($ID) nicht gefunden!" $MyInvocation.MyCommand return $false } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Remove-DSM7Group ############################################################################### # DSM7 Funktionen - Members of Groups function Get-DSM7ComputerGroupMembers { <# .SYNOPSIS Ermittelt Mitglieder einer Computergruppe. .DESCRIPTION Ermittelt Mitglieder einer Computergruppe. .EXAMPLE Get-DSM7ComputerGroupMembers -Name "Gruppe" -LDAPPath "Managed Users & Computers/OU1" .NOTES veraltet .LINK #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath ) if (Confirm-Connect) { if ($Name -or $ID -gt 0) { if ($ID -le 1) { $Group = Get-DSM7Group -Name $Name -LDAPPath $LDAPPath $ID = $Group.ID } if ($ID) { if ($DSM7Version -gt "7.2.2") { $result = Get-DSM7GroupMembers -ID $ID Write-Log 1 "Bitte Funktion Get-DSM7ComputerGroupMembers nicht mehr benutzen, wird ersetzt durch die Funktion Get-DSM7GroupMembers. Achtung - Objekt des Ergebnis hat andere Eigenschaften!!!" $MyInvocation.MyCommand } else { $result = Get-DSM7AssociationList -SchemaTag "GroupMembers" -SourceObjectID $ID -resolvedName } if ($result) { Write-Log 0 "($($Group.Name)) ($LDAPPath) erfolgreich." $MyInvocation.MyCommand return $result } else { Write-Log 1 "($($Group.Name)) ($LDAPPath) hat kein Mitglieder!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "($Name$ID) ($LDAPPath) nicht gefunden!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7ComputerGroupMembers function Get-DSM7ComputerInGroups { <# .SYNOPSIS Ermittelt die Computergruppen eines Computers. .DESCRIPTION Ermittelt die Computergruppen eines Computers. .EXAMPLE Get-DSM7ComputerInGroups -Name "Computer" -LDAPPath "Managed Users & Computers/OU1" .NOTES veraltet .LINK #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath ) if (Confirm-Connect) { if ($Name -or $ID -gt 0) { if ($ID -le 1) { $Object = Get-DSM7Computer -Name $Name -LDAPPath $LDAPPath } else { $Object = Get-DSM7Computer -ID $ID } if ($Object) { if ($DSM7Version -gt "7.2.2") { $result = Get-DSM7ListOfMemberships -ID $Object.ID -MembershipTypes "All" Write-Log 1 "Bitte Funktion Get-DSM7ComputerInGroups nicht mehr benutzen, wird ersetzt durch die Funktion Get-DSM7ListOfMemberships. Achtung - Objekt des Ergebnis hat andere Eigenschaften!!!" $MyInvocation.MyCommand } else { $result = Get-DSM7AssociationList -SchemaTag "GroupMembers" -TargetObjectID $Object.ID -resolvedName } } if ($result) { Write-Log 0 "($($Object.Name)) ($LDAPPath) erfolgreich." $MyInvocation.MyCommand return $result } else { Write-Log 1 "($($Object.Name) ($LDAPPath) ist in keiner Gruppe!." $MyInvocation.MyCommand return $false } } else { Write-Log 1 "($Name$ID) ($LDAPPath) nicht erfolgreich." $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7ComputerInGroups function Get-DSM7ComputerInGroup { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.string]$Name, [Parameter(Position=1, Mandatory=$true)] [system.string]$GroupName, [Parameter(Position=2, Mandatory=$false)] [system.string]$GroupLDAPPath ) if (Confirm-Connect) { $Computer = Get-DSM7Computer -Name $Name $Group = Get-DSM7Group -Name $GroupName -LDAPPath $GroupLDAPPath if ($Computer -and $Group) { $result = Get-DSM7AssociationListObject -SchemaTag "GroupMembers" -SourceObjectID $Group.ID -TargetObjectID $Computer.ID -TargetSchemaTag $Computer.SchemaTag if ($result) { $result = Get-DSM7AssociationObject -ID $result.ID -SchemaTag $result.SchemaTag Write-Log 0 "($Name) - ($GroupName) - ($GroupLDAPPath) erfolgreich." $MyInvocation.MyCommand return $result } else { Write-Log 1 "($Name) ($LDAPPath) ist nicht Mitglied in $GroupName!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "($Name) - ($GroupName) - ($GroupLDAPPath) nicht erfolgreich." $MyInvocation.MyCommand return $false } } } function Get-DSM7ExternalGroupMembers { <# .SYNOPSIS Ermittelt Mitglieder einer Externalgruppe. .DESCRIPTION Ermittelt Mitglieder einer Externalgruppe. .EXAMPLE Get-DSM7ExternalGroupMembers -Name "Gruppe" -LDAPPath "Managed Users & Computers/OU1" .NOTES veraltet .LINK #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=3, Mandatory=$false)] [ValidateSet("User", "Computer")] [system.string]$TargetSchemaTag ) if (Confirm-Connect) { if ($Name -or $ID -gt 0) { if ($ID -le 1) { $Group = Get-DSM7Group -Name $Name -LDAPPath $LDAPPath $ID = $Group.ID } if ($ID) { if ($DSM7Version -gt "7.2.2") { $result = Get-DSM7GroupMembers -ID $ID Write-Log 1 "Bitte Funktion Get-DSM7ExternalGroupMembers nicht mehr benutzen, wird ersetzt durch die Funktion Get-DSM7GroupMembers. Achtung - Objekt des Ergebnis hat andere Eigenschaften!!!" $MyInvocation.MyCommand } else { $result = Get-DSM7AssociationList -SchemaTag "ExternalGroupMembers" -SourceObjectID $ID -TargetSchemaTag $TargetSchemaTag -resolvedName } if ($result) { Write-Log 0 "($($Group.Name)) ($LDAPPath) erfolgreich." $MyInvocation.MyCommand return $result } else { return $false } } else { Write-Log 1 "($Name$ID) ($LDAPPath) nicht erfolgreich." $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7ExternalGroupMembers function Get-DSM7GroupMembersObject { [CmdletBinding()] param ( $Group, $Filter = "", $Properties = "Name" ) try { if ($DSM7Version -gt "7.3.3") { $Webrequest = Get-DSM7RequestHeader -action "GetGroupMembers" $Webrequest.GroupId = $Group.ID $Webrequest.FilterCriteria = $Filter $Webrequest.PropertiesToRetrieve = $Properties $Webresult = $DSM7WebService.GetGroupMembers($Webrequest).Members Write-Log 0 "$($Webresult.ID) erfolgreich erstellt." $MyInvocation.MyCommand return $Webresult } else { $Webrequest = Get-DSM7RequestHeader -action "GetGroupMembers" $Webrequest.Group = $Group $Webrequest.FilterCriteria = $Filter $Webrequest.PropertiesToRetrieve = $Properties $Webresult = $DSM7WebService.GetGroupMembers($Webrequest).Members Write-Log 0 "$($Webresult.ID) erfolgreich erstellt." $MyInvocation.MyCommand return $Webresult } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7GroupMembers { <# .SYNOPSIS Ermittelt Mitglieder einer Gruppe. .DESCRIPTION Ermittelt Mitglieder einer Gruppe. .EXAMPLE Get-DSM7GroupMembers -Name "Gruppe" -LDAPPath "Managed Users & Computers/OU1" .EXAMPLE Get-DSM7GroupMembers -Name "Gruppe" -Filter "Name=Computername" .NOTES neue Funktion ab der Version 7.2.3 .LINK Get-DSM7Group .LINK New-DSM7Group .LINK Move-DSM7Group .LINK Update-DSM7Group .LINK Remove-DSM7Group .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.string]$Filter ) if (Confirm-Connect) { if ($Name -or $ID -gt 0) { if ($ID -le 1) { if ($ParentContID){ $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } $searchFilter = "(&(Name:IgnoreCase=$Name)(|(BasePropGroupTag=SwCategory)(BasePropGroupTag=Group)))" $search = Get-DSM7ObjectList -Filter $searchFilter -ParentContID $ParentContID if ($search.count -gt 1) { Write-Log 1 "Name nicht eindeutig bitte LDAP Path angeben!!!" $MyInvocation.MyCommand } else { $ID = $search.ID } } if ($ID) { $Group = Get-DSM7ObjectObject -ID $ID if ($DSM7Version -gt "7.2.2") { $result = Get-DSM7GroupMembersObject -Group $Group -Filter $Filter if ($result) { $result = Convert-DSM7ObjectListtoPSObject ($result) } } else { $result = Get-DSM7AssociationList -SchemaTag "$($Group.SchemaTag)Members" -SourceObjectID $ID -resolvedName } if ($result) { Write-Log 0 "$($Group.Name) ($LDAPPath) erfolgreich." $MyInvocation.MyCommand return $result } else { Write-Log 1 "Gruppe/Filter nicht gefunden!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "($Name$ID) ($LDAPPath) nicht erfolgreich." $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7GroupMembers function Get-DSM7ListOfMembershipsObject { [CmdletBinding()] param ( $object, $MembershipTypes ) try { $Webrequest = Get-DSM7RequestHeader -action "GetListOfMemberships" $Webrequest.Object = $object $Webrequest.MembershipTypes = $MembershipTypes $Webresult = $DSM7WebService.GetListOfMemberships($Webrequest).ListOfMemberships Write-Log 0 "$($Webresult.ID) erfolgreich erstellt." $MyInvocation.MyCommand return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7ListOfMemberships { <# .SYNOPSIS Ermittelt die Gruppen eines Objektes. .DESCRIPTION Ermittelt die Gruppen eines Objektes. .EXAMPLE Get-DSM7ListOfMemberships -Name "Objektes" -MembershipTypes "AllStaticGroups" -LDAPPath "Managed Users & Computers/OU1" .NOTES neue Funktion ab der Version 7.2.3 .LINK Get-DSM7Group .LINK New-DSM7Group .LINK Move-DSM7Group .LINK Update-DSM7Group .LINK Remove-DSM7Group .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [ValidateSet("None","Containers","HierarchicalObjects","DynamicGroups","StaticGroups","ExternalGroups","AllStaticGroups","AllGroups","All")] [system.string]$MembershipTypes = "All", [system.string]$Schematag = "*" ) if (Confirm-Connect) { if ($Name -or $ID -gt 0) { if ($ID -le 1) { $Objectfind = Get-DSM7ObjectList -Filter "(Name:IgnoreCase=$Name)(Schematag=$Schematag)" -LDAPPath $LDAPPath if ($Objectfind.count -gt 1) { Write-Log 0 "Fehler bei der Ermittlung des Objekts!!!" $MyInvocation.MyCommand return $false } else { $ID = $Objectfind.id } } $Object = Get-DSM7ObjectObject -ID $ID if ($Object) { if ($DSM7Version -gt "7.2.2") { $result = Get-DSM7ListOfMembershipsObject -object $Object -MembershipTypes $MembershipTypes if ($result) { $result = Convert-DSM7ObjectListtoPSObject ($result) } } else { $result = Get-DSM7AssociationList -SchemaTag "GroupMembers" -TargetObjectID $Object.ID } if ($result) { Write-Log 0 "($($Object.Name)) ($LDAPPath) erfolgreich." $MyInvocation.MyCommand return $result } else { return $false } } else { Write-Log 1 "($($Object.Name)) ($LDAPPath) nicht erfolgreich." $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Name($Name) oder ID($ID) nicht angegeben!!!" $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7ListOfMemberships function Update-DSM7MembershipInGroupsObject { [CmdletBinding()] param ( $Object, $AddGroupobjects, $RemoveGroupobjects ) try { $Webrequest = Get-DSM7RequestHeader -action "ChangeMembershipInGroups" $Webrequest.Member = $Object $Webrequest.GroupsToAddMemberTo = $AddGroupobjects $Webrequest.GroupsToRemoveMemberFrom = $RemoveGroupobjects $Webresult = $DSM7WebService.ChangeMembershipInGroups($Webrequest) Write-Log 0 "Objektmitgliedschaften erfolgreich geaendert." $MyInvocation.MyCommand return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Update-DSM7MembershipInGroups { <# .SYNOPSIS aendert eine oder mehrere Gruppen eines Objektes. .DESCRIPTION aendert eine oder mehrere Gruppen eines Objektes. .EXAMPLE Update-DSM7MembershipInGroups -Name "Objektes" -AddObjectNames "Gruppe1,Gruppe2" -RemoveObjectNames "Gruppe1,Gruppe2" -LDAPPath "Managed Users & Computers/OU1" .NOTES neue Funktion ab der Version 7.2.3 .LINK Get-DSM7Group .LINK New-DSM7Group .LINK Move-DSM7Group .LINK Update-DSM7Group .LINK Remove-DSM7Group .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, $AddGroupIDs, $AddGroupNames, $RemoveGroupIDs, $RemoveGroupNames ) if (Confirm-Connect) { if ($Name -or $ID -gt 0) { if ($AddGroupIDs -or $AddGroupNames -or $RemoveGroupIDs -or $RemoveGroupNames) { if ($ID -le 1) { $Objectfind = Get-DSM7ObjectList -Filter "(Name:IgnoreCase=$Name)" -LDAPPath $LDAPPath if ($Objectfind.count -gt 1) { Write-Log 0 "Fehler bei der Ermittlung des Objekts!!!" $MyInvocation.MyCommand return $false } else { $ID = $Objectfind.id } } $Object = Get-DSM7ObjectObject -ID $ID if ($Object) { if ($DSM7Version -gt "7.2.2") { if ($AddGroupNames -and !$AddGroupIDs) { foreach ($AddGroupName in $AddGroupNames) { $filter = "$filter(Name:IgnoreCase=$AddGroupName)" } $filter = "(&(|$filter)(|(SchemaTag=Group)(SchemaTag=SwCategory)(SchemaTag=PatchMgmtRuleFilter)))" $AddGroupList = Get-DSM7ObjectList -Filter $filter if ($AddGroupList) { $AddGroupIDs = $AddGroupList| select -ExpandProperty ID } } if ($AddGroupIDs) { $AddGroupobjects = Get-DSM7ObjectsObject -IDs $AddGroupIDs } if ($RemoveGroupNames -and !$RemoveGroupIDs) { foreach ($RemoveGroupName in $RemoveGroupNames) { $filter = "$filter(Name:IgnoreCase=$RemoveGroupName)" } $filter = "(&(|$filter)(|(SchemaTag=Group)(SchemaTag=SwCategory)(SchemaTag=PatchMgmtRuleFilter)))" $RemoveGroupList = Get-DSM7ObjectList -Filter $filter if ($RemoveGroupList) { $RemoveGroupIDs = $RemoveGroupList| select -ExpandProperty ID } } if ($RemoveGroupIDs) { $RemoveGroupobjects = Get-DSM7ObjectsObject -IDs $RemoveGroupIDs } if ($RemoveGroupobjects -or $AddGroupobjects) { $result = Update-DSM7MembershipInGroupsObject -Object $Object -AddGroupobjects $AddGroupobjects -RemoveGroupobjects $RemoveGroupobjects if ($result) { $AddGroupNames = $AddGroupobjects| select -ExpandProperty Name $RemoveGroupNames = $RemoveGroupobjects| select -ExpandProperty Name Write-Log 0 "Objekt: $($Object.Name) - Gruppe(n) hinzugefuegt: ($AddGroupNames) und Gruppe(n) entfernt: ($RemoveGroupNames)" $MyInvocation.MyCommand return $true } else { Write-Log 1 "Objekt: $($Object.Name) - Gruppe(n) nicht hinzugefuegt!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Objekt: $($Object.Name) - Gruppe(n) nicht gefunden!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Diese Funktion benoetigt 7.2.2 oder hoeher!!!" $MyInvocation.MyCommand return $false } Write-Log 0 "($($Object.Name)) ($LDAPPath) erfolgreich." $MyInvocation.MyCommand return $result } else { Write-Log 1 "($($Object.Name)) ($LDAPPath) nicht erfolgreich." $MyInvocation.MyCommand return $false } } } else { Write-Log 1 "Keine Gruppe angegeben!!!" $MyInvocation.MyCommand } } else { Write-Log 1 "Name($Name) oder ID($ID) nicht angegeben!!!" $MyInvocation.MyCommand return $false } } Export-ModuleMember -Function Update-DSM7MembershipInGroups function Update-DSM7MemberListOfGroupObject { [CmdletBinding()] param ( $Group, $AddObjectobjects, $RemoveObjectobjects ) try { $Webrequest = Get-DSM7RequestHeader -action "ChangeMemberListOfGroup" $Webrequest.Group = $Group $Webrequest.MembersToAdd = $AddObjectobjects $Webrequest.MembersToRemove = $RemoveObjectobjects $Webresult = $DSM7WebService.ChangeMemberListOfGroup($Webrequest) Write-Log 0 "Gruppenmitgliedschaften erfolgreich geaendert." $MyInvocation.MyCommand return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Update-DSM7MemberListOfGroup { <# .SYNOPSIS aendert eine oder mehrere Objekte zu einer Gruppe. .DESCRIPTION aendert eine oder mehrere Objekte zu einer Gruppe. .EXAMPLE Update-DSM7MembershipInGroups -Name "Gruppe" -AddObjectNames "Computername1,Computername2" -RemoveObjectNames "Computername1,Computername2" -LDAPPath "Managed Users & Computers/OU1" .NOTES neue Funktion ab der Version 7.2.3 .LINK Get-DSM7Group .LINK New-DSM7Group .LINK Move-DSM7Group .LINK Update-DSM7Group .LINK Remove-DSM7Group .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, $AddObjectIDs, $AddObjectNames, $RemoveObjectIDs, $RemoveObjectNames ) if (Confirm-Connect) { if ($Name -or $ID -gt 0) { if ($AddObjectIDs -or $AddObjectNames -or $RemoveObjectIDs -or $RemoveObjectNames) { if ($ID -le 1) { $Objectfind = Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$Name)(|(SchemaTag=Group)(SchemaTag=SwCategory)(SchemaTag=PatchMgmtRuleFilter)))" -LDAPPath $LDAPPath if ($Objectfind.count -gt 1) { Write-Log 0 "Fehler bei der Ermittlung des Objekts!!!" $MyInvocation.MyCommand return $false } else { $ID = $Objectfind.id } } $Object = Get-DSM7ObjectObject -ID $ID if ($Object) { if ($DSM7Version -gt "7.2.2") { if ($AddObjectNames -and !$AddObjectIDs) { foreach ($AddObjectName in $AddObjectNames) { $filter = "$filter(Name:IgnoreCase=$AddObjectName)" } $filter = "(|$filter)" $AddObjectList = Get-DSM7ObjectList -Filter $filter if ($AddObjectList) { $AddObjectIDs = $AddObjectList| select -ExpandProperty ID } } if ($AddObjectIDs) { $AddObjectobjects = Get-DSM7ObjectsObject -IDs $AddObjectIDs } if ($RemoveObjectNames -and !$RemoveObjectIDs) { foreach ($RemoveObjectName in $RemoveObjectNames) { $filter = "$filter(Name:IgnoreCase=$RemoveObjectName)" } $filter = "(|$filter)" $RemoveObjectIDs = Get-DSM7ObjectList -Filter $filter| select -ExpandProperty ID } if ($RemoveObjectIDs) { $RemoveObjectobjects = Get-DSM7ObjectsObject -IDs $RemoveObjectIDs } if ($RemoveObjectobjects -or $AddObjectobjects) { $result = Update-DSM7MemberListOfGroupObject -Group $Object -AddObjectobjects $AddObjectobjects -RemoveObjectobjects $RemoveObjectobjects if ($result) { $AddObjectNames = $AddObjectobjects| select -ExpandProperty Name $RemoveObjectNames = $RemoveObjectobjects| select -ExpandProperty Name Write-Log 0 "Gruppe: $($Object.Name) Objekt(e) hinzugefuegt: ($AddObjectNames) und Objekt(e) entfernt: ($RemoveObjectNames)" $MyInvocation.MyCommand return $true } else { Write-Log 1 "Gruppe: $($Object.Name) Objekt(e) nicht hinzugefuegt: ($AddObjectNames) und Objekt(e) ($RemoveObjectNames)!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Gruppe: $($Object.Name) Objekt(e) nicht gefunden: ($AddObjectNames) und Objekt(e)($RemoveObjectNames)!!!" $MyInvocation.MyCommand } } else { Write-Log 1 "Diese Funktion benoetigt 7.2.3 oder hoeher!!!" $MyInvocation.MyCommand return $false } Write-Log 0 "($($Object.Name)) ($LDAPPath) erfolgreich." $MyInvocation.MyCommand return $result } else { Write-Log 1 "($($Object.Name)) ($LDAPPath) nicht erfolgreich." $MyInvocation.MyCommand return $false } } } else { Write-Log 1 "Keine Gruppe angegeben!!!" $MyInvocation.MyCommand } else { Write-Log 1 "Name($Name) oder ID($ID) nicht angegeben!!!" $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Update-DSM7MemberListOfGroup function Add-DSM7ComputerToGroup { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=2, Mandatory=$false)] [system.string]$GroupName, [Parameter(Position=3, Mandatory=$false)] [system.string]$GroupLDAPPath ) if (Confirm-Connect) { $Computer = Get-DSM7Computer -Name $Name -LDAPPath $LDAPPath $Group = Get-DSM7Group -Name $GroupName -LDAPPath $GroupLDAPPath if ($Computer -and $Group) { if ($DSM7Version -gt "7.2.2") { Write-Log 1 "Bitte Funktion Add-DSM7ComputerToGroup nicht mehr benutzen, wird ersetzt durch die Funktion Update-DSM7MembershipInGroups." $MyInvocation.MyCommand $result = Update-DSM7MembershipInGroups -ID $Computer.ID -AddGroupIDs $Group.ID } else { $result = New-DSM7Association -SchemaTag "GroupMembers" -SourceObjectID $Group.ID -TargetObjectID $Computer.ID -TargetSchemaTag $Computer.SchemaTag } if ($result) { Write-Log 0 "($Name) zu Gruppe ($GroupName) erfolgreich hinzugefuegt." $MyInvocation.MyCommand $result = Convert-DSM7AssociationtoPSObject($result) return $result } else { Write-Log 1 "($Name) ist schon in Gruppe ($GroupName)!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "($Name) nicht zu ($GroupName) hinzugefuegt." $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Add-DSM7ComputerToGroup function Remove-DSM7ComputerFromGroup { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [int]$ID, [Parameter(Position=1, Mandatory=$false)] [system.string]$Name, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=4, Mandatory=$false)] [int]$GroupID, [Parameter(Position=4, Mandatory=$false)] [system.string]$GroupName, [Parameter(Position=5, Mandatory=$false)] [system.string]$GroupLDAPPath ) if (Confirm-Connect) { $FindObject = Get-DSM7ObjectList -Filter "(Name:IgnoreCase=$Name)" -LDAPPath $LDAPPath $Group = Get-DSM7Group -Name $GroupName -LDAPPath $GroupLDAPPath if ($Group) { if ($DSM7Version -gt "7.2.2") { Write-Log 1 "Bitte Funktion Remove-DSM7ComputerFromGroup nicht mehr benutzen, wird ersetzt durch die Funktion Update-DSM7MembershipInGroups." $MyInvocation.MyCommand $result = Update-DSM7MembershipInGroups -ID $FindObject.ID -RemoveGroupIDs $Group.ID } else { $Object = Get-DSM7AssociationListObject -SchemaTag "GroupMembers" -SourceObjectID $Group.ID -TargetObjectID $FindObject.ID -TargetSchemaTag $FindObject.SchemaTag $result = Remove-DSM7AssociationObject -Object $Object } if ($result) { Write-Log 0 "($Name) zu Gruppe ($GroupName) erfolgreich entfernt." $MyInvocation.MyCommand return $true } else { Write-Log 1 "($Name) konte nicht enfernt werden aus ($GroupName)!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "($Name) oder ($GroupName) nicht bekannt." $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Remove-DSM7ComputerFromGroup ############################################################################### # DSM7 Funktionen - Policy function Get-DSM7Policy { <# .SYNOPSIS List ein Policy Object aus. .DESCRIPTION List ein Policy Object aus. .EXAMPLE Get-DSM7Policy -ID 123456 -resolvedName .NOTES .LINK Get-DSM7PolicyList .LINK Get-DSM7Policy .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [int]$ID, [switch]$resolvedName = $false ) if (Confirm-Connect) { $result = Convert-DSM7PolicytoPSObject(Get-DSM7PolicyObject -ID $ID) -resolvedName:$resolvedName if ($result) { Write-Log 0 "($ID) erfolgreich." $MyInvocation.MyCommand } else { Write-Log 2 "keine Policy gefunden mit ID($ID)!" $MyInvocation.MyCommand } return $result } } Export-ModuleMember -Function Get-DSM7Policy function Get-DSM7PolicyObject { [CmdletBinding()] param ( [int]$ID ) if (Confirm-Connect) { try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicy" $Webrequest.PolicyId = $ID $Webresult = $DSM7WebService.GetPolicy($Webrequest).RetrievedPolicy return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } function Get-DSM7PoliciesObject { [CmdletBinding()] param ( [system.array]$IDs ) if (Confirm-Connect) { try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicies" $Webrequest.PolicyIds = $IDs $Webresult = $DSM7WebService.GetPolicies($Webrequest).PolicyList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } function Update-DSM7PolicyListObject { [CmdletBinding()] param ( $PolicyList ) if (Confirm-Connect) { try { $Webrequest = Get-DSM7RequestHeader -action "UpdatePolicyList" $Webrequest.PolicyListToUpdate = $PolicyList $Webresult = $DSM7WebService.UpdatePolicyList($Webrequest).UpdatedPolicyList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } function Update-DSM7PolicyObject { [CmdletBinding()] param ( $Policy, $InstallationParametersOfSwSetComponents, $Options, [switch]$Stats ) try { $Webrequest = Get-DSM7RequestHeader -action "UpdatePolicy" if ($DSM7Version -gt "7.3.0") { $Webrequest.PolicyToUpdate = New-Object $DSM7Types["PolicyToManage"] $Webrequest.PolicyToUpdate.Policy = $Policy if ($InstallationParametersOfSwSetComponents) { $i = 0 foreach ($key in $InstallationParametersOfSwSetComponents.Keys) { $Webrequest.PolicyToUpdate.InstallationParametersOfSwSetComponents+= New-Object $DSM7Types["SwSetComponentInstallationParameters"] $Webrequest.PolicyToUpdate.InstallationParametersOfSwSetComponents[$i].SwInstallationParameters = $InstallationParametersOfSwSetComponents[$key] $Webrequest.PolicyToUpdate.InstallationParametersOfSwSetComponents[$i].SwSetComponentObjectId = $key $i++ } } if ($Options) { $Webrequest.Options = $Options } } else { $Webrequest.PolicyToUpdate = $Policy if ($InstallationParametersOfSwSetComponents) { $i = 0 foreach ($key in $InstallationParametersOfSwSetComponents.Keys) { $Webrequest.InstallationParametersOfSwSetComponents+= New-Object $DSM7Types["SwSetComponentInstallationParameters"] $Webrequest.InstallationParametersOfSwSetComponents[$i].SwInstallationParameters = $InstallationParametersOfSwSetComponents[$key] $Webrequest.InstallationParametersOfSwSetComponents[$i].SwSetComponentObjectId = $key $i++ } } } $Webresult = $DSM7WebService.UpdatePolicy($Webrequest) if ($Stats) { write-log 0 "Anzahl betroffener Instanzen: $($Webresult.NumberOfInstancesAffected)." $MyInvocation.MyCommand write-log 0 "Anzahl geupdateter Instanzen: $($Webresult.NumberOfInstancesUpdated)." $MyInvocation.MyCommand } $global:DSM7AsynchronousExecution = $Webresult.AsynchronousExecution $global:DSM7InfrastructureTaskGuid = $Webresult.InfrastructureTaskGuid return $Webresult.UpdatedPolicy } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Update-DSM7Policy { <# .SYNOPSIS aendert ein Policy Object aus. .DESCRIPTION aendert ein Policy Object aus. .EXAMPLE Update-DSM7Policy -ID xxx -PolicyRestrictionList (yyy,zzz) -PolicyRestrictionType Include -IsActiv .EXAMPLE Update-DSM7Policy -SwUniqueID "{A42DB21A-D859-4789-BD1C-FC5B5C61EA27}" -IsActiv -ActivationStartDate "22:00 01.01.1970" -TargetName "Ziel" .EXAMPLE Update-DSM7Policy -SwName "Software" -IsActiv -ActivationStartDate "22:00 01.01.1970" -TargetName "Ziel" .EXAMPLE Update-DSM7Policy -SwName "Software" -IsActiv -SwInstallationParams ("BootEnvironmentType=1234","UILanguage=en-us") .EXAMPLE Update-DSM7Policy -SwName "Software" -IsActiv -InstanceActivationMode AutoActivateOnce -InstanceActivationOnCreate CreateInactive .EXAMPLE Update-DSM7Policy -SwName "Software" -IsActiv -UpdatePackage -CriticalUpdate -DeactivateUpdatedInstances -RemoveInstanceInstallationParameters .NOTES .LINK Get-DSM7PolicyList .LINK Get-DSM7Policy .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [int]$ID, [Parameter(Position=0, Mandatory=$false)] [system.string]$SwName, [Parameter(Position=1, Mandatory=$false)] [system.string]$SwUniqueID, [Parameter(Position=2, Mandatory=$false)] [system.string]$SwLDAPPath, [Parameter(Position=2, Mandatory=$false)] [system.array]$SwInstallationParams, [Parameter(Position=3, Mandatory=$false)] [system.int32]$TargetId, [Parameter(Position=3, Mandatory=$false)] [system.string]$TargetName, [Parameter(Position=4, Mandatory=$false)] [system.string]$TargetLDAPPath, [Parameter(Position=4, Mandatory=$false)] [system.int32]$TargetParentContID, [Parameter(Position=5, Mandatory=$false)] [system.string]$ActivationStartDate, [Parameter(Position=6, Mandatory=$false)] [switch]$IsActiv = $false, [Parameter(Position=7, Mandatory=$false)] [switch]$IsUserPolicy = $false, [Parameter(Position=8, Mandatory=$false)] [system.string]$Parameter, [ValidateSet("Include","Exclude","None")] [Parameter(Position=9, Mandatory=$false)] [system.string]$PolicyRestrictionType, [Parameter(Position=10, Mandatory=$false)] [system.array]$PolicyRestrictionList, [Parameter(Position=11, Mandatory=$false)] [switch]$UpdatePackage, [Parameter(Position=12, Mandatory=$false)] [switch]$CriticalUpdate, [Parameter(Position=13, Mandatory=$false)] [switch]$DeactivateUpdatedInstances, [Parameter(Position=14, Mandatory=$false)] [switch]$RemoveInstanceInstallationParameters, [Parameter(Position=15, Mandatory=$false)] [ValidateSet("CreateActive","CreateInactive")] [System.String]$InstanceActivationOnCreate = 0, [Parameter(Position=16, Mandatory=$false)] [ValidateSet("AutoActivateAlways","AutoActivateOnce", "DontAutoactivate")] [system.string]$InstanceActivationMode = "DontAutoactivate", [Parameter(Position=17, Mandatory=$false)] [switch]$Stats ) if (Confirm-Connect) { try { if (!$ID) { $NoPolicy = $false if ($SwName) { $AssignedObject = Get-DSM7Software -Name $SwName -LDAPPath $SwLDAPPath } if ($SwUniqueID) { $AssignedObject = Get-DSM7Software -UniqueID $SwUniqueID -LDAPPath $SwLDAPPath } $TargetObject = Find-DSM7Target -ID $TargetID -Name $TargetName -LDAPPath $TargetLDAPPath -ParentContID $TargetParentContID if ($TargetObject -and $AssignedObject) { Write-Log 0 "($($AssignedObject.Name)) und ($TargetName) gefunden." $MyInvocation.MyCommand $Policys = Convert-DSM7PolicyListtoPSObject(Get-DSM7PolicyListByAssignedSoftwareObject -ID $AssignedObject.ID)|Select-Object ID -ExpandProperty TargetObjectList|where {$_.TargetObjectID -eq $TargetObject.ID} if ($Policys.count -gt 1) { Write-Log 1 "Mehere Policys($($Policys.count)) gefunden!!! Bitte ID benutzen." $MyInvocation.MyCommand } else{ $ID = $Policys.ID } } } if ($ID) { $Policy = Get-DSM7PolicyObject -ID $ID if (!$AssignedObject) { $AssignedObject = Get-DSM7Software -ID $policy.AssignedObjectID } if ($Policy) { if ($SwInstallationParams) { $SwSetComponentInstallationParameters = @{} if ($AssignedObject.SchemaTag -eq "OSSoftwareSet" -or $AssignedObject.SchemaTag -eq "eScriptSoftwareSet" ) { $PolicyList = Get-DSM7PolicyListByTarget -ID $policy.TargetObjectList[0].TargetObjectID $PolicyListComponentIds = $PolicyList|where {$_.'SwSetComponentPolicy.ParentPolicyId' -eq $Policy.ID}|select -ExpandProperty ID $PolicyListObjects = Get-DSM7PoliciesObject -IDs $PolicyListComponentIds foreach ($PolicyListObject in $PolicyListObjects) { $i = 0 foreach ($SwInstallationParam in $SwInstallationParams) { $ValueName = $SwInstallationParam.split("=",2)[0] $ValueValue = $SwInstallationParam.split("=",2)[1] $policyparam = $PolicyListObject.swinstallationparameters|where {$_.Tag -eq $ValueName} if ($policyparam) { $policyparam.Value = $ValueValue $SwSetComponentInstallationParameters[$PolicyListObject.ID]+= $policyparam Write-Log 0 "Parameter ($ValueName=$ValueValue) geaendert." $MyInvocation.MyCommand $i++ } } } } else { foreach ($SwInstallationParam in $SwInstallationParams) { $ValueName = $SwInstallationParam.split("=",2)[0] $ValueValue = $SwInstallationParam.split("=",2)[1] $policyparam = $policy.swinstallationparameters|where {$_.Tag -eq $ValueName} $policyparam.Value = $ValueValue Write-Log 0 "Parameter ($ValueName=$ValueValue) geaendert." $MyInvocation.MyCommand } } } if ($Policy.IsActive -and $ActivationStartDate) { $Policy.IsActive = $false $Policy = Update-DSM7PolicyObject -Policy $Policy } if ($ActivationStartDate) { Write-Log 0 "Start Datum ist:($ActivationStartDate)" $MyInvocation.MyCommand if ($ActivationStartDate) { $StartDate = $(Get-Date($ActivationStartDate)) } else { $StartDate = $(Get-Date) } $StartDate = $StartDate + [System.TimeZoneInfo]::Local.BaseUtcOffset if ([System.TimeZoneInfo]::Local.IsDaylightSavingTime($StartDate)) { $StartDate = $StartDate + 36000000000 } $Policy.ActivationStartDate = $StartDate } $Policy.IsActive = $IsActiv if (($PolicyRestrictionList -and $PolicyRestrictionType) -or $PolicyRestrictionType -eq "None") { switch ($PolicyRestrictionType) { "None" { $Policy.PolicyRestrictionList = @() $Policy.PolicyRestrictionType = 0 } "Include" { $Policy.PolicyRestrictionList = $PolicyRestrictionList $Policy.PolicyRestrictionType = 1 } "Exclude" { $Policy.PolicyRestrictionList = $PolicyRestrictionList $Policy.PolicyRestrictionType = 2 } } } if ($PolicyListObjects) { foreach ($PolicyListObject in $PolicyListObjects) { $PolicyListObject = Update-DSM7PolicyObject -Policy $PolicyListObject } } if ($UpdatePackage) { if ($AssignedObject.'Software.IsLastReleasedRev') { Write-Log 0 "$($AssignedObject.Name) auf ($($TargetObject.Name)) ist schon letzte Revision." $MyInvocation.MyCommand } else { $newAssignedObject = Get-DSM7Software -UniqueID $AssignedObject.UniqueID -IsLastReleasedRev $Policy.AssignedObjectID = $newAssignedObject.ID $PolicyOptions = New-Object $DSM7Types["PolicyUpdateOptions"] if ($CriticalUpdate) { $PolicyOptions.Criticality = "CriticalUpdate" } else { $PolicyOptions.Criticality = "NonCriticalUpdate" } $PolicyOptions.DeactivateUpdatedInstances = $DeactivateUpdatedInstances $PolicyOptions.RemoveInstanceInstallationParameters = $RemoveInstanceInstallationParameters } } $Policy.InstanceActivationMode = $InstanceActivationMode $Policy.InstanceActivationOnCreate = $InstanceActivationOnCreate $Policy = Update-DSM7PolicyObject -Policy $Policy -InstallationParametersOfSwSetComponents $SwSetComponentInstallationParameters -Options $PolicyOptions -Stats:$Stats if ($Policy) { $Policy = Convert-DSM7PolicytoPSObject ($Policy) -resolvedName Write-Log 0 "$($AssignedObject.Name) auf ($($TargetObject.Name)) erfolgreich geaendert." $MyInvocation.MyCommand return $Policy } else { return $false } } } else { Write-Log 1 "($SwName$SwUniqueID) und/oder ($TargetName) nicht gefunden." $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Update-DSM7Policy function Add-DSM7TargetToPolicyObject { [CmdletBinding()] param ( $Policy, $PolicyTarget ) try { $Webrequest = Get-DSM7RequestHeader -action "AddTargetToPolicy" $Webrequest.Policy = $Policy $Webrequest.TargetToAdd = $PolicyTarget $Webresult = $DSM7WebService.AddTargetToPolicy($Webrequest).UpdatedPolicy Write-Log 0 "$($PolicyTarget.ID) erfolgreich hinzugefuegt." $MyInvocation.MyCommand return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Remove-DSM7TargetFromPolicyObject { [CmdletBinding()] param ( $Policy, $PolicyTarget, [switch]$ForceRemove = $false ) try { $Webrequest = Get-DSM7RequestHeader -action "RemoveTargetFromPolicy" $Webrequest.Policy = $Policy $Webrequest.TargetToRemove = $PolicyTarget $Webrequest.ForceRemove = $ForceRemove $Webresult = $DSM7WebService.RemoveTargetFromPolicy($Webrequest).UpdatedPolicy Write-Log 0 "$($PolicyTarget.ID) erfolgreich entfernt." $MyInvocation.MyCommand return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7PolicyList { <# .SYNOPSIS Listet Policy(s) Object auf. .DESCRIPTION Listet Policy(s) Object auf. .EXAMPLE Get-DSM7PolicyList -Filter "(AssignedObjectId=1234)" -Attributes "AssignedObjectId" .NOTES .LINK Get-DSM7PolicyList .LINK Get-DSM7Policy .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [system.string]$Attributes, [system.string]$Filter, [switch]$recursive = $false ) if (Confirm-Connect) { try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicyList" $Webrequest.LdapQuery = "<LDAP://rootDSE>;$Filter;$Attributes;subtree" $Webrequest.MaxResults = -1 $Webresult = $($DSM7WebService.GetPolicyList($Webrequest)).PolicyList if ($Webresult.count -gt 0) { $Webresult = Convert-DSM7PolicyListtoPSObject($Webresult) Write-Log 0 "($Filter) erfolgreich." $MyInvocation.MyCommand return $Webresult } else { return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7PolicyList function Move-DSM7PolicyToTarget { <# .SYNOPSIS aendert ein Policy Object aus. .DESCRIPTION aendert ein Policy Object aus. .EXAMPLE Move-DSM7PolicyToTarget -ID xxx -TargetName "Ziel" .NOTES .LINK Get-DSM7PolicyList .LINK Get-DSM7Policy .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [int]$ID, [Parameter(Position=1, Mandatory=$false)] [system.int32]$TargetID, [Parameter(Position=1, Mandatory=$false)] [system.string]$TargetName, [Parameter(Position=2, Mandatory=$false)] [system.string]$TargetLDAPPath, [Parameter(Position=2, Mandatory=$false)] [system.int32]$TargetParentContID, [switch]$ForceRemove = $false ) if (Confirm-Connect) { try { $TargetObject = Find-DSM7Target -ID $TargetID -Name $TargetName -LDAPPath $TargetLDAPPath -ParentContID $TargetParentContID if ($TargetObject) { Write-Log 0 "($($AssignedObject.Name)) und ($($TargetObject.Name)) gefunden." $MyInvocation.MyCommand $Policy = Get-DSM7PolicyObject -ID $ID $result = Add-DSM7TargetToPolicyObject -Policy $Policy -PolicyTarget $TargetObject $Policy = Get-DSM7PolicyObject -ID $ID if ($Policy.TargetObjectList.Count -le 1 -and $Policy.TargetObjectList[0].TargetObjectID -ne $TargetObject.ID) { $result = Remove-DSM7PolicyObject -Policy $Policy -ForceDelete } else { foreach ($Target in $Policy.TargetObjectList) { $RemoveObject = Get-DSM7ObjectObject -ID $Target.TargetObjectID if ($RemoveObject.ID -ne $TargetObject.ID ) { $RemovePolicy = Get-DSM7PolicyObject -ID $ID $result = Remove-DSM7TargetFromPolicyObject -Policy $RemovePolicy -PolicyTarget $RemoveObject -ForceRemove:$ForceRemove } } } if ($result){ Write-Log 0 "Policy erfolgreich nach ($TargetName) verschoben." $MyInvocation.MyCommand return $true } else { Write-Log 1 "Alte Ziele nicht entfernt." $MyInvocation.MyCommand return $false } } else { Write-Log 1 "($TargetName) nicht gefunden." $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Move-DSM7PolicyToTarget function Remove-DSM7PolicyFromTarget { <# .SYNOPSIS aendert ein Policy Object aus. .DESCRIPTION aendert ein Policy Object aus. .EXAMPLE Remove-DSM7PolicyFromTarget -ID xxx -TargetName "Ziel" .NOTES .LINK Get-DSM7PolicyList .LINK Get-DSM7Policy .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Remove-DSM7PolicyFromTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [int]$ID, [Parameter(Position=1, Mandatory=$false)] [system.int32]$TargetID, [Parameter(Position=1, Mandatory=$false)] [system.string]$TargetName, [Parameter(Position=2, Mandatory=$false)] [system.string]$TargetLDAPPath, [Parameter(Position=2, Mandatory=$false)] [system.int32]$TargetParentContID, [switch]$ForceRemove = $false ) if (Confirm-Connect) { try { $TargetObject = Find-DSM7Target -ID $TargetID -Name $TargetName -LDAPPath $TargetLDAPPath -ParentContID $TargetParentContID if ($TargetObject) { Write-Log 0 "($($TargetObject.Name)) gefunden." $MyInvocation.MyCommand $Policy = Get-DSM7PolicyObject -ID $ID if ($Policy.TargetObjectList.Count -le 1 -and $Policy.TargetObjectList[0].TargetObjectID -ne $TargetObject.ID) { $result = Remove-DSM7PolicyObject -Policy $Policy -ForceDelete } else { $RemoveObject = Get-DSM7ObjectObject -ID $TargetObject.ID $RemovePolicy = Get-DSM7PolicyObject -ID $ID $result = Remove-DSM7TargetFromPolicyObject -Policy $RemovePolicy -PolicyTarget $RemoveObject -ForceRemove:$ForceRemove } if ($result){ Write-Log 0 "Policy erfolgreich von ($($TargetObject.Name)) entfernt." $MyInvocation.MyCommand return $true } else { Write-Log 1 "Ziele nicht entfernt." $MyInvocation.MyCommand return $false } } else { Write-Log 1 "($TargetName) nicht gefunden." $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Remove-DSM7PolicyFromTarget function Add-DSM7PolicyToTarget { <# .SYNOPSIS Fuegt eine Policy einem Object zu. .DESCRIPTION Fuegt eine Policy einem Object zu. .EXAMPLE Add-DSM7PolicyToTarget -ID 1234 -TargetName "Ziel" -TargetLDAPPath "Managed Users & Computers/OU1" .EXAMPLE Add-DSM7PolicyToTarget -ID 1234 -TargetID 1234 .NOTES .LINK Get-DSM7PolicyList .LINK Get-DSM7Policy .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [int]$ID, [Parameter(Position=1, Mandatory=$false)] [system.int32]$TargetID, [Parameter(Position=1, Mandatory=$false)] [system.string]$TargetName, [Parameter(Position=2, Mandatory=$false)] [system.string]$TargetLDAPPath, [Parameter(Position=2, Mandatory=$false)] [system.string]$TargetParentContID ) if (Confirm-Connect) { try { $TargetObject = Find-DSM7Target -ID $TargetID -Name $TargetName -LDAPPath $TargetLDAPPath -ParentContID $TargetParentContID if ($TargetObject) { $Policy = Get-DSM7PolicyObject -ID $ID Write-Log 0 "($ID) und ($($TargetObject.Name)) gefunden." $MyInvocation.MyCommand $result = Add-DSM7TargetToPolicyObject -Policy $Policy -PolicyTarget $TargetObject if ($result){ Write-Log 0 "Policy Ziel ($TargetName) hinzugefuegt." $MyInvocation.MyCommand return $true } else { Write-Log 1 "Fehler!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "($TargetName) nicht gefunden." $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Add-DSM7PolicyToTarget function New-DSM7Policy { <# .SYNOPSIS Erstellt eine neue Policy. .DESCRIPTION Erstellt eine neue Policy. .EXAMPLE New-DSM7Policy -SwName "Microsoft Windows Update Agent (x64)" -TargetName "Ziel" -IsActiv .EXAMPLE New-DSM7Policy -UpdateID "ARDC-210215:AcroRdrDCUpd2100120138.msp:Adobe Acrobat Reader DC 21:0407" -TargetName "Ziel" -IsActiv .EXAMPLE New-DSM7Policy -swid 12345 -TargetID 54321 -IsActiv -SwInstallationParams ("BootEnvironmentType=1234","UILanguage=en-us") .EXAMPLE New-DSM7Policy -IsActiv -TargetID 54321 -SwUniqueID "{4F3BB3DB-F1F3-4ACA-A7B6-F8CA57FD20F1}" -JobPolicy -JobPolicyTrigger 10 .EXAMPLE New-DSM7Policy -IsActiv -TargetID 54321 -SwUniqueID "{D4128974-088B-4395-B326-5A9DBBCE9DFD}" -DenyPolicy .NOTES .LINK Get-DSM7PolicyList .LINK Get-DSM7Policy .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$SwName, [Parameter(Position=0, Mandatory=$false)] [system.int32]$SwID, [Parameter(Position=1, Mandatory=$false)] [system.string]$SwUniqueID, [Parameter(Position=1, Mandatory=$false)] [system.string]$SwUpdateID, [Parameter(Position=2, Mandatory=$false)] [system.string]$SwLDAPPath, [Parameter(Position=2, Mandatory=$false)] [system.array]$SwInstallationParams, [Parameter(Position=3, Mandatory=$false)] [system.int32]$TargetID, [Parameter(Position=3, Mandatory=$false)] [system.string]$TargetName, [Parameter(Position=4, Mandatory=$false)] [system.string]$TargetLDAPPath, [Parameter(Position=4, Mandatory=$false)] [system.int32]$TargetParentContID, [Parameter(Position=5, Mandatory=$false)] [system.string]$ActivationStartDate, [Parameter(Position=5, Mandatory=$false)] [system.int32]$Priority = 1000, [Parameter(Position=5, Mandatory=$false)] [system.int32]$MaintenanceBehavior = 2, [Parameter(Position=5, Mandatory=$false)] [system.int32]$WakeUpTimeSpan = 240, [Parameter(Position=5, Mandatory=$false)] [system.int32]$MaxPreStagingTime = 365, [Parameter(Position=5, Mandatory=$false)] [system.int32]$MinPreStagingTime = 365, [Parameter(Position=6, Mandatory=$false)] [switch]$IsActiv = $false, [Parameter(Position=7, Mandatory=$false)] [switch]$IsUserPolicy = $false, [Parameter(Position=8, Mandatory=$false)] [switch]$IsUserPolicyCurrentComputer = $false, [Parameter(Position=9, Mandatory=$false)] [switch]$IsUserPolicyAllassociatedComputer = $false, [Parameter(Position=10, Mandatory=$false)] [switch]$JobPolicy = $false, [Parameter(Position=10, Mandatory=$false)] [system.int32]$JobPolicyTrigger = 0, [Parameter(Position=10, Mandatory=$false)] [switch]$DenyPolicy = $false, [Parameter(Position=10, Mandatory=$false)] [switch]$Pilot = $false, [Parameter(Position=11, Mandatory=$false)] [ValidateSet("CreateActive","CreateInactive")] [System.String]$InstanceActivationOnCreate = "CreateActive", [Parameter(Position=12, Mandatory=$false)] [ValidateSet("AutoActivateAlways","AutoActivateOnce", "DontAutoactivate")] [system.string]$InstanceActivationMode = "DontAutoactivate", [Parameter(Position=13, Mandatory=$false)] [switch]$Stats ) if (Confirm-Connect) { try { $NoPolicy = $false if ($SwName) { if ($Pilot) { $AssignedObject = Get-DSM7Software -Name $SwName -LDAPPath $SwLDAPPath } else { $AssignedObject = Get-DSM7Software -Name $SwName -LDAPPath $SwLDAPPath -IsLastReleasedRev } } if ($SwUniqueID) { if ($Pilot) { $AssignedObject = Get-DSM7Software -UniqueID $SwUniqueID } else { $AssignedObject = Get-DSM7Software -UniqueID $SwUniqueID -IsLastReleasedRev } } if ($SwUpdateID) { if ($Pilot) { $AssignedObject = Get-DSM7Software -UpdateID $SwUpdateID } else { $AssignedObject = Get-DSM7Software -UpdateID $SwUpdateID -IsLastReleasedRev } } if ($SwID) { $AssignedObject = Get-DSM7Software -ID $SwID } if ($AssignedObject) { $DSMSwSetIds = Get-DSM7AssociationList -SchemaTag "SwSetComponents" -SourceObjectID $AssignedObject.ID|select -ExpandProperty TargetObjectID if ($DSMSwSetIds) { Write-Log 0 "Software ist ein Set." $MyInvocation.MyCommand $DSMInstallationParamDefinitions = @{} foreach ($DSMSwSetId in $DSMSwSetIds) { $DSMSoftware = Get-DSM7ObjectObject -ID $DSMSwSetId $DSMInstallationParamDefinitions[$DSMSwSetId] = Get-DSM7SwInstallationParamDefinitionsObject $DSMSoftware $DSMTestnoValue =$DSMInstallationParamDefinitions[$DSMSwSetId]|where {$_.IsMandatory -and !$_.DefaultValue} if ($DSMTestnoValue -and !$SwInstallationParams -and !$SwSetComponentPolicyIDs) { Write-Log 1 "Es kann keine Policy erstellt, es fehlen folgende Parameter: ($($DSMTestnoValue|select Tag))!!!" $MyInvocation.MyCommand return $false } } if ($SwInstallationParams) { $SwSetComponentInstallationParameters = @{} foreach ($key in $DSMInstallationParamDefinitions.Keys) { $i = 0 foreach ($SwInstallationParam in $SwInstallationParams) { $ValueName = $SwInstallationParam.split("=",2)[0] $ValueValue = $SwInstallationParam.split("=",2)[1] $DSMInstallationParamDefinition = $DSMInstallationParamDefinitions[$key]|where {$_.Tag -eq $ValueName} if ($DSMInstallationParamDefinition) { $SwSetComponentInstallationParameters[$key]+= New-Object $DSM7Types["MdsSWInstallationParam"] $SwSetComponentInstallationParameters[$key][$i].Tag = $DSMInstallationParamDefinition.Tag $SwSetComponentInstallationParameters[$key][$i].SwInstallationParamDefID = $DSMInstallationParamDefinition.ID $SwSetComponentInstallationParameters[$key][$i].Type = "SwInstallationConfiguration" $SwSetComponentInstallationParameters[$key][$i].Value = $ValueValue $i++ } } } } } $DSMInstallationParamDefinitions = Get-DSM7SwInstallationParamDefinitionsObject (Get-DSM7ObjectObject -ID $AssignedObject.ID) $DSMTestnoValue =$DSMInstallationParamDefinitions|where {$_.IsMandatory -and !$_.DefaultValue} if ($DSMTestnoValue -and !$SwInstallationParams -and !$DenyPolicy) { Write-Log 1 "Es kann keine Policy erstellt, es fehlen folgende Parameter: ($($DSMTestnoValue|select Tag))!!!" $MyInvocation.MyCommand return $false } if ($SwInstallationParams) { $SwInstallationParameters = @{} $i = 0 foreach ($SwInstallationParam in $SwInstallationParams) { $ValueName = $SwInstallationParam.split("=",2)[0] $ValueValue = $SwInstallationParam.split("=",2)[1] $DSMInstallationParamDefinition = $DSMInstallationParamDefinitions|where {$_.Tag -eq $ValueName} if ($DSMInstallationParamDefinition) { $Raw = New-Object PSObject add-member -inputobject $Raw -MemberType NoteProperty -name Id -Value $DSMInstallationParamDefinition.ID add-member -inputobject $Raw -MemberType NoteProperty -name Tag -Value $DSMInstallationParamDefinition.Tag add-member -inputobject $Raw -MemberType NoteProperty -name Value -Value $ValueValue add-member -inputobject $Raw -MemberType NoteProperty -name Type -Value $DSMInstallationParamDefinition.InstallationParamType $SwInstallationParameters[$($DSMInstallationParamDefinition.ID)]=$Raw } } } if ($SwSetComponentPolicyIDs) { $SwSetComponentInstallationParameters = @{} $i = 0 foreach ($SwSetComponentPolicyID in $SwSetComponentPolicyIDs) { $SwSetComponentPolicy = Get-DSM7PolicyObject -ID $SwSetComponentPolicyID if ($SwSetComponentPolicy.SwInstallationParameters) { $SwSetComponentInstallationParameters[$($SwSetComponentPolicy.AssignedObjectID)]=$SwSetComponentPolicy.SwInstallationParameters } } } $TargetObject = Find-DSM7Target -ID $TargetID -Name $TargetName -LDAPPath $TargetLDAPPath -ParentContID $TargetParentContID if ($ActivationStartDate) { $StartDate = $(Get-Date($ActivationStartDate)) } else { $StartDate = $(Get-Date) } $StartDate = $StartDate + [System.TimeZoneInfo]::Local.BaseUtcOffset if ([System.TimeZoneInfo]::Local.IsDaylightSavingTime($StartDate)) { $StartDate = $StartDate + 36000000000 } if ($AssignedObject -and $TargetObject) { switch ($AssignedObject.Schematag) { "VMWPPatchPackage" {$SchemaTag = "PatchPolicy"} "MSWUV6Package" {$SchemaTag = "PatchPolicy"} "LPRPatchPackage" {$SchemaTag = "PatchPolicy"} "PnpPackage" {$SchemaTag = "PnpPolicy"} default {$SchemaTag = "SwPolicy"} } switch ($AssignedObject."Software.ReleaseStatus") { 0 {$StagingMode = "InstallationTest"} 1 {$StagingMode = "Standard"} 2 {$NoPolicy = $true} default {$StagingMode = "Standard"} } if ($NoPolicy) { Write-Log 1 "Es kann keine Policy erstellt werden Paket ist zurueckgezogen!!!" $MyInvocation.MyCommand } else { Write-Log 0 "($($AssignedObject.Name)) und ($($TargetObject.Name)) gefunden." $MyInvocation.MyCommand $Policy = New-Object $DSM7Types["MdsPolicy"] $Policy.SchemaTag = $SchemaTag $Policy.Priority = $Priority $Policy.WakeUpTimeSpan = $WakeUpTimeSpan $Policy.MaxPreStagingTime = $MaxPreStagingTime $Policy.MinPreStagingTime = $MinPreStagingTime $Policy.MaintenanceBehavior = $MaintenanceBehavior if ($JobPolicy) { $Policy.SchemaTag = "JobPolicy" $PropertyList = @() $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfString"] $PropertyListObject.Tag = "JobTrigger" $PropertyListObject.Type = "Option" $PropertyListObject.TypedValue = $JobPolicyTrigger $PropertyList += $PropertyListObject $PropGroupListObject = New-Object $DSM7Types["MdsPropGroup"] $PropGroupListObject.Tag = "JobPolicy" $PropGroupListObject.PropertyList = $PropertyList $PropGroupList += $PropGroupListObject $Policy.PropGroupList = $PropGroupList $Policy.InstallationOrder = $AssignedObject.'Software.InstallationOrder' } if ($SchemaTag = "PatchPolicy") { $Policy.ShopForAllUsers = $true } if ($DenyPolicy) { $Policy.SchemaTag = "DenyPolicy" $Policy.ShopForAllUsers = $true $Policy.MaintenanceBehavior = 0 $Policy.WakeUpTimeSpan = 240 $Policy.MaxPreStagingTime = 365 $Policy.MinPreStagingTime = 365 $Policy.Priority = -2147483648 } $Policy.AssignedObjectID = $AssignedObject.ID $Policy.Name = "" $Policy.Description = "" $Policy.IsActive = $IsActiv if ($DSM7Version -gt "7.3.2") { $Policy.TargetSelectionMode = 0 if ($IsUserPolicyCurrentComputer -or $IsUserPolicy) { $Policy.TargetSelectionMode = 1 } if ($IsUserPolicyAllassociatedComputer) { $Policy.TargetSelectionMode = 2 } } else { $Policy.IsUserPolicy = $IsUserPolicy } $Policy.ActivationStartDate = $StartDate $PolicyTarget = New-Object $DSM7Types["MdsPolicyTarget"] $PolicyTarget.TargetObjectID = $TargetObject.ID $PolicyTarget.TargetSchemaTag = $TargetObject.SchemaTag $Policy.InstanceActivationMode = $InstanceActivationMode $Policy.InstanceActivationOnCreate = $InstanceActivationOnCreate $result = New-DSM7PolicyObject -NewPolicy $Policy -PolicyTarget $PolicyTarget -SwInstallationParam $SwInstallationParameters -InstallationParametersOfSwSetComponents $SwSetComponentInstallationParameters -Stats:$Stats if ($result) { $result = Convert-DSM7PolicytoPSObject ($result) -resolvedName if ($result) { Write-Log 0 "Neue Policy ($($result.ID)) mit Ziel ($($TargetObject.Name)) erstellt." $MyInvocation.MyCommand } else { Write-Log 1 "Keine neue Policy mit Ziel ($($TargetObject.Name)) erstellt!!!" $MyInvocation.MyCommand } return $result } else { Write-Log 2 "Keine neue Policy mit Ziel ($($TargetObject.Name)) erstellt!!!" $MyInvocation.MyCommand return $false } } } else { Write-Log 1 "Ziel ($TargetName$TargetID) nicht gefunden." $MyInvocation.MyCommand return $false } } else { Write-Log 1 "($SwName$SwUniqueID$SwID) nicht gefunden." $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function New-DSM7Policy function Copy-DSM7Policy { <# .SYNOPSIS Kopiert ein Policy zu einem neuem Ziel. .DESCRIPTION Kopiert ein Policy zu einem neuem Ziel. .EXAMPLE Copy-DSM7Policy -ID 1234 -TargetID 1234 .EXAMPLE Copy-DSM7Policy -ID 1234 -TargetName "Name" -LDAPPath "Managed Users & Computers/OU1" .NOTES .LINK Get-DSM7PolicyList .LINK Get-DSM7Policy .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.Int32]$ID, [Parameter(Position=1, Mandatory=$false)] [system.int32]$TargetID, [Parameter(Position=1, Mandatory=$false)] [system.string]$TargetName, [Parameter(Position=2, Mandatory=$false)] [system.string]$TargetLDAPPath, [Parameter(Position=2, Mandatory=$false)] [system.string]$TargetParentContID, [Parameter(Position=3, Mandatory=$false)] [system.string]$ActivationStartDate, [Parameter(Position=4, Mandatory=$false)] [system.array]$SwSetComponentPolicyIDs, [Parameter(Position=5, Mandatory=$false)] [switch]$IsActiv = $false, [Parameter(Position=6, Mandatory=$false)] [switch]$IsUserPolicy = $false, [Parameter(Position=7, Mandatory=$false)] [switch]$IsUserPolicyCurrentComputer = $false, [Parameter(Position=8, Mandatory=$false)] [switch]$IsUserPolicyAllassociatedComputer = $false, [Parameter(Position=9, Mandatory=$false)] [switch]$JobPolicy = $false, [Parameter(Position=10, Mandatory=$false)] [switch]$Stats ) if (Confirm-Connect) { try { $NoPolicy = $false $TargetObject = Find-DSM7Target -ID $TargetID -Name $TargetName -LDAPPath $TargetLDAPPath -ParentContID $TargetParentContID if ($ActivationStartDate) { $StartDate = $(Get-Date($ActivationStartDate)) } else { $StartDate = $(Get-Date) } $StartDate = $StartDate + [System.TimeZoneInfo]::Local.BaseUtcOffset if ([System.TimeZoneInfo]::Local.IsDaylightSavingTime($StartDate)) { $StartDate = $StartDate + 36000000000 } if ($TargetObject) { $Policy = Get-DSM7PolicyObject -ID $ID if ($Policy.SchemaTag -ne "SwSetComponentPolicy") { if ($SwSetComponentPolicyIDs) { $SwSetComponentInstallationParameters = @{} $i = 0 foreach ($SwSetComponentPolicyID in $SwSetComponentPolicyIDs) { $SwSetComponentPolicy = Get-DSM7PolicyObject -ID $SwSetComponentPolicyID if ($SwSetComponentPolicy.SwInstallationParameters) { $SwSetComponentInstallationParameters[$($SwSetComponentPolicy.AssignedObjectID)]=$SwSetComponentPolicy.SwInstallationParameters } } } $Policy.IsActive = $IsActiv if ($DSM7Version -gt "7.3.2") { $Policy.TargetSelectionMode = 0 if ($IsUserPolicyCurrentComputer) { $Policy.TargetSelectionMode = 1 } if ($IsUserPolicyAllassociatedComputer) { $Policy.TargetSelectionMode = 2 } } else { $Policy.IsUserPolicy = $IsUserPolicy } $Policy.ActivationStartDate = $StartDate $PolicyTarget = New-Object $DSM7Types["MdsPolicyTarget"] $PolicyTarget.TargetObjectID = $TargetObject.ID $PolicyTarget.TargetSchemaTag = $TargetObject.SchemaTag $result = New-DSM7PolicyObject -NewPolicy $Policy -PolicyTarget $PolicyTarget -InstallationParametersOfSwSetComponents $SwSetComponentInstallationParameters -Stats:$Stats if ($result) { $result = Convert-DSM7PolicytoPSObject ($result) Write-Log 0 "Neue Policy ($($result.ID)) mit Ziel ($($TargetObject.Name)) erstellt." $MyInvocation.MyCommand return $result } else { Write-Log 1 "Keine neue Policy erstellt!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Keine neue Policy erstellt, Policy ist Komponente!" $MyInvocation.MyCommand return $true } } else { Write-Log 1 "Kein Ziel gefunden!!!" $MyInvocation.MyCommand } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Copy-DSM7Policy function New-DSM7PolicyObject { [CmdletBinding()] param ( $NewPolicy, $PolicyTarget, $SwInstallationParam, $InstallationParametersOfSwSetComponents, [switch]$Stats ) try { $Webrequest = Get-DSM7RequestHeader -action "CreatePolicy" if ($DSM7Version -gt "7.3.0") { $Webrequest.PolicyToCreate = New-Object $DSM7Types["PolicyToManage"] $Webrequest.PolicyToCreate.Policy = $NewPolicy $Webrequest.PolicyToCreate.Policy.TargetObjectList = $PolicyTarget if ($SWInstallationParam) { $i = 0 foreach ($key in $SwInstallationParam.Keys) { $Webrequest.PolicyToCreate.Policy.SwInstallationParameters+= New-Object $DSM7Types["MdsSWInstallationParam"] $Webrequest.PolicyToCreate.Policy.SwInstallationParameters[$i].Tag = $SwInstallationParam[$key].Tag $Webrequest.PolicyToCreate.Policy.SwInstallationParameters[$i].SwInstallationParamDefID = $key $Webrequest.PolicyToCreate.Policy.SwInstallationParameters[$i].Type = "SwInstallationConfiguration" $Webrequest.PolicyToCreate.Policy.SwInstallationParameters[$i].Value = $SwInstallationParam[$key].Value $i++ } } if ($InstallationParametersOfSwSetComponents) { $i = 0 foreach ($key in $InstallationParametersOfSwSetComponents.Keys) { $Webrequest.PolicyToCreate.InstallationParametersOfSwSetComponents+= New-Object $DSM7Types["SwSetComponentInstallationParameters"] $Webrequest.PolicyToCreate.InstallationParametersOfSwSetComponents[$i].SwInstallationParameters = $InstallationParametersOfSwSetComponents[$key] $Webrequest.PolicyToCreate.InstallationParametersOfSwSetComponents[$i].SwSetComponentObjectId = $key $i++ } } if ($DSM7Version -gt "7.4.0") { $Webrequest.PolicyToCreate.Policy.GenTypeData = new-object $DSM7Types["MdsGenType"] $CreationSource = $MyInvocation.MyCommand.Module.Name if ($DSM7CreationSource) {$CreationSource = $DSM7CreationSource} $Webrequest.PolicyToCreate.Policy.GenTypeData.CreationSource = $CreationSource } } else { $Webrequest.NewPolicy = $NewPolicy $Webrequest.NewPolicy.TargetObjectList = $PolicyTarget $Webrequest.InstallationParametersOfSwSetComponents = $InstallationParametersOfSwSetComponents } $Webresult = $DSM7WebService.CreatePolicy($Webrequest) if ($Stats) { write-log 0 "Anzahl erstellter Instanzen: $($Webresult.NumberOfInstancesCreated)." $MyInvocation.MyCommand write-log 0 "Anzahl Instanzen mit nicht gueltigen Voraussetzungen: $($Webresult.NumberOfInstancesFailingPrerequisite)." $MyInvocation.MyCommand write-log 0 "Anzahl ungueltiger Instanzen: $($Webresult.NumberOfInvalidInstances)." $MyInvocation.MyCommand } $global:DSM7AsynchronousExecution = $Webresult.AsynchronousExecution $global:DSM7InfrastructureTaskGuid = $Webresult.InfrastructureTaskGuid return $Webresult.CreatedPolicy } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Remove-DSM7PolicyObject { [CmdletBinding()] param ( $Policy, [switch]$ForceDelete = $false, [switch]$DeleteAssociatedPolicies = $true ) try { $Webrequest = Get-DSM7RequestHeader -action "DeletePolicy" $Webrequest.PolicyToDelete = $Policy if ($DSM7Version -gt "7.3.0") { $Webrequest.Options = New-Object $DSM7Types["DeletePolicyOptions"] $Webrequest.Options.ForceDelete = $ForceDelete } else { $Webrequest.ForceDelete = $ForceDelete $Webrequest.DeleteAssociatedPolicies = $DeleteAssociatedPolicies } $Webresult = $DSM7WebService.DeletePolicy($Webrequest).DeletePolicyResult return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Remove-DSM7Policy { <# .SYNOPSIS Luescht die Policy. .DESCRIPTION Loescht die Policy. .EXAMPLE Remove-DSM7Policy -ID 12345 .EXAMPLE Remove-DSM7Policy -SwName "TestSoftware" -TargetName "Computername" -ForceDelete -DeleteAssociatedPolicies .NOTES .LINK Get-DSM7PolicyList .LINK Get-DSM7Policy .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$ID, [Parameter(Position=0, Mandatory=$false)] [system.string]$SwName, [Parameter(Position=1, Mandatory=$false)] [system.string]$SwUniqueID, [Parameter(Position=2, Mandatory=$false)] [system.string]$SwLDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.int32]$TargetID, [Parameter(Position=3, Mandatory=$false)] [system.string]$TargetName, [Parameter(Position=4, Mandatory=$false)] [system.string]$TargetLDAPPath, [switch]$ForceDelete = $false, [switch]$DeleteAssociatedPolicies = $true ) if (Confirm-Connect) { try { $NoPolicy = $false if ($SwName) { $AssignedObject = Get-DSM7Software -Name $SwName -LDAPPath $SwLDAPPath } if ($SwUniqueID) { $AssignedObject = Get-DSM7Software -UniqueID $SwUniqueID -LDAPPath $SwLDAPPath } $TargetObject = Find-DSM7Target -ID $TargetID -Name $TargetName -LDAPPath $TargetLDAPPath -ParentContID $TargetParentContID if (($TargetObject -and $AssignedObject) -or $ID) { if (!$ID) { $Policys = Convert-DSM7PolicyListtoPSObject(Get-DSM7PolicyListByAssignedSoftwareObject -ID $AssignedObject.ID)|Select-Object ID -ExpandProperty TargetObjectList|where {$_.TargetObjectID -eq $TargetObject.ID} if ($Policys.count -gt 1) { Write-Log 1 "Mehere Policys($($Policys.count)) gefunden!!! Bitte ID benutzen." $MyInvocation.MyCommand } else{ $ID = $Policys.ID } } if ($ID) { $result = Get-DSM7PolicyObject -ID $ID if ($result) { $result = Remove-DSM7PolicyObject -Policy $result -ForceDelete:$ForceDelete -DeleteAssociatedPolicies:$DeleteAssociatedPolicies Write-Log 0 "$($AssignedObject.Name) auf ($($TargetObject.Name)) erfolgreich geloescht." $MyInvocation.MyCommand return $true } } else { Write-Log 1 "Keine Policy gefunden nicht gefunden." $MyInvocation.MyCommand } } else { Write-Log 1 "($SwName$SwUniqueID) und/oder ($TargetName) nicht gefunden." $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Remove-DSM7Policy function Get-DSM7PolicyListByAssignedSoftwareObject { [CmdletBinding()] param ( [int]$ID) try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicyListByAssignedObject" $Webrequest.AssignedObjectId = $ID $Webrequest.ConsiderAllObjectRevisions = $true $Webresult = $DSM7WebService.GetPolicyListByAssignedObject($Webrequest).PolicyList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7PolicyListByAssignedSoftware { <# .SYNOPSIS Ermittelt die Policys einer Software. .DESCRIPTION Ermittelt die Policys einer Software. .EXAMPLE Get-DSM7PolicyListByAssignedSoftware -ID 1234 .EXAMPLE Get-DSM7PolicyListByAssignedSoftware -Name "Software" -$LDAPPath "Global Software Library/SWF1" .NOTES .LINK Get-DSM7PolicyList .LINK Get-DSM7Policy .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath ) if (Confirm-Connect) { try { if ($ID) { $Software = Get-DSM7Software -ID $ID } else { $Software = Get-DSM7Software -Name $Name -LDAPPath $LDAPPath } if ($Software.count -gt 1) { Write-Log 1 "($Name) -> ($LDAPPath) nicht eindeutig." $MyInvocation.MyCommand return $false } else { $result = Get-DSM7PolicyListByAssignedSoftwareObject -ID $Software.ID if ($result) { Write-Log 0 "$($Software.Name) erfolgreich." $MyInvocation.MyCommand $result = Convert-DSM7PolicyListtoPSObject($result) -resolvedName return $result } else { Write-Log 1 "Konnte kein Object finden!" $MyInvocation.MyCommand return $false } } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7PolicyListByAssignedSoftware function Get-DSM7PolicyListByTargetObject { [CmdletBinding()] param ( [int]$ID) try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicyListByTarget" $Webrequest.TargetId = $ID $Webresult = $DSM7WebService.GetPolicyListByTarget($Webrequest).PolicyList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7PolicyListByTarget { <# .SYNOPSIS Ermittelt die Policys eines Ziels. .DESCRIPTION Ermittelt die Policys eines Ziels. .EXAMPLE Get-DSM7PolicyListByTarget -Name "Group" -LDAPPath "Managed Users & Computers/OU1" .NOTES .LINK Get-DSM7PolicyList .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [switch]$resolvedName ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0) { $Object = Find-DSM7Target -ID $ID -Name $Name -LDAPPath $LDAPPath -ParentContID $ParentContID if ($Object -and $Object.count -lt 2) { $result = Get-DSM7PolicyListByTargetObject -ID $Object.ID if ($result) { $result = Convert-DSM7PolicyListtoPSObject($result) -resolvedName foreach ($Policy in $result) { if ($Policy.SchemaTag -ne "SwSetComponentPolicies") { $SwPolicy += @($Policy) } } Write-Log 0 "($($Object.Name)) -> erfolgreich." $MyInvocation.MyCommand return $SwPolicy } else { Write-Log 1 "Konnte kein Objekte finden!" $MyInvocation.MyCommand return $false } } } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7PolicyListByTarget function Copy-DSM7PolicyListNewTarget { <# .SYNOPSIS Kopiert die Policys eines Ziels und/oder erweiter eine Referens Ziel zu einer neuen Ziel. .DESCRIPTION Kopiert die Policys eines Ziels und/oder erweiter eine Referens Ziel zu einer neuen Ziel. .EXAMPLE Copy-DSM7PolicyListNewTarget -Name "Name" -LDAPPath "Managed Users & Computers/OU1" -TargetName "Name" -TargetLDAPPath "Managed Users & Computers/OU1" .EXAMPLE Copy-DSM7PolicyListNewTarget -Name "Name" -LDAPPath "Managed Users & Computers/OU1" -TargetName "Name" -TargetLDAPPath "Managed Users & Computers/OU1" -ExtentionName "Name" -ExtentionLDAPPath "Managed Users & Computers/OU1" .EXAMPLE Copy-DSM7PolicyListNewTarget -ID 1234 -TargetID 1235 .EXAMPLE Copy-DSM7PolicyListNewTarget -ID 1234 -TargetID 1235 -ExtentionID 1236 .NOTES .LINK Get-DSM7PolicyList .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Copy-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$ID, [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=2, Mandatory=$false)] [system.string]$TargetID, [Parameter(Position=2, Mandatory=$false)] [system.string]$TargetName, [Parameter(Position=3, Mandatory=$false)] [system.string]$TargetLDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.int32]$TargetParentContID, [Parameter(Position=4, Mandatory=$false)] [system.string]$ExtentionID, [Parameter(Position=4, Mandatory=$false)] [system.string]$ExtentionName, [Parameter(Position=5, Mandatory=$false)] [system.string]$ExtentionLDAPPath, [Parameter(Position=17, Mandatory=$false)] [switch]$Stats ) if (Confirm-Connect) { try { $SourceObject = Find-DSM7Target -ID $ID -Name $Name -LDAPPath $LDAPPath -ParentContID $ParentContID if ($SourceObject.count -gt 1) { Write-Log 1 "($Name) -> ($LDAPPath) nicht eindeutig." $MyInvocation.MyCommand return $false } else { [Array]$SourcePolicy = Get-DSM7PolicyListByTarget -ID $SourceObject.ID if ($SourcePolicy) { Write-Log 0 "($Name) -> ($LDAPPath) erfolgreich." $MyInvocation.MyCommand $TargetObject = Find-DSM7Target -ID $TargetID -Name $TargetName -LDAPPath $TargetLDAPPath -ParentContID $TargetParentContID if (!$TargetObject) { if ($TargetLDAPPath -or $TargetParentContID) { if (!$TargetParentContID) { $TargetParentContID = Get-DSM7LDAPPathID -LDAPPath $TargetLDAPPath } } else { $TargetParentContID = $SourceObject.ParentContID } $TargetObject = New-DSM7Object -Name $TargetName -ParentContID $TargetParentContID -SchemaTag $SourceObject.SchemaTag -GroupType $SourceObject.GroupType -PropGroupList $SourceObject.PropGroupList Write-Log 0 "($TargetName) -> ($LDAPPath) erfolgreich erstellt." $MyInvocation.MyCommand } if ($TargetObject.count -gt 1) { Write-Log 1 "Ziel $TargetName nicht erstellt/oder nicht eindeutig!" $MyInvocation.MyCommand return $false } else { Write-Log 0 "($($TargetObject.Name)) -> erfolgreich ermittelt." $MyInvocation.MyCommand $PolicylistTarget = Get-DSM7PolicyListByTarget -ID $TargetObject.ID $I = 0 $J = 0 $K = $SourcePolicy.Count - ($SourcePolicy|where {$_.SchemaTag -eq "SwSetComponentPolicy"}).Count if ($ExtentionID -or $ExtentionName) { if ($ExtentionID -le 1) { $PolicylistExtention = Get-DSM7PolicyListByTarget -Name $ExtentionName -LDAPPath $ExtentionLDAPPath } else { $PolicylistExtention = Get-DSM7PolicyListByTarget -ID $ExtentionID } } foreach ($Policy in $SourcePolicy) { $SWSetIDs = @() if ($Policy.AssignedObjectSchemaTag -like "*Set") { $SWSetIDs = $SourcePolicy|where {$_.'SwSetComponentPolicy.ParentPolicyId' -eq $Policy.ID}|select -ExpandProperty ID } $PolicyTarget = New-Object $DSM7Types["MdsPolicyTarget"] $PolicyTarget.TargetObjectID = $TargetObject.ID $PolicyTarget.TargetSchemaTag = $TargetObject.SchemaTag $IDTarget = $($PolicylistTarget|where {$_.AssignedObjectUniqueID -eq $($Policy.AssignedObjectUniqueID)}).ID if ($IDTarget -gt 0 -and $Policy.SchemaTag -ne "SwSetComponentPolicy") { Write-Log 0 "Paket ($($Policy.AssignedObjectName)) ist schon zugewiesen." $MyInvocation.MyCommand $J++ } elseif ($Policy.SchemaTag -ne "SwSetComponentPolicy") { $ID = $($PolicylistExtention|where {$_.AssignedObjectUniqueID -eq $($Policy.AssignedObjectUniqueID)}).ID if ($ID -gt 0) { $result = Add-DSM7PolicyToTarget -ID $ID -TargetID $TargetObject.ID } else { $result = Copy-DSM7Policy -ID $Policy.ID -TargetID $TargetObject.ID -IsActiv:$Policy.IsActive -SwSetComponentPolicyIDs $SWSetIDs -Stats:$Stats } if (!$result) { Write-Log 1 "Fehler beim Paket ($($Policy.AssignedObjectName))!" $MyInvocation.MyCommand } else { $I++ Write-Log 0 "Paket ($($Policy.AssignedObjectName)) erfolgreich zugewiesen." $MyInvocation.MyCommand } } } if ($I -eq $K) { Write-Log 0 "Alle Policys erstellt! $I Policy(s) erstellt." $MyInvocation.MyCommand return $true } else { Write-Log 1 "Nicht alle Policys neu erstellt! $I von $K erstellt, $J waren schon vorhahen." $MyInvocation.MyCommand return $true } } } else { Write-Log 1 "Konnte kein Object finden!" $MyInvocation.MyCommand return $false } } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Copy-DSM7PolicyListNewTarget function Get-DSM7PolicyStatisticsByTargetObject { [CmdletBinding()] param ( [system.string]$ID ) try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicyStatisticsByTarget" $Webrequest.TargetId = $ID $Webresult = $DSM7WebService.GetPolicyStatisticsByTarget($Webrequest).ComplianceStatisticResults return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7PolicyStatisticsByTarget { <# .SYNOPSIS Gibt eine Statistik von einer Software zurueck. .DESCRIPTION Gibt eine Statistik von einer Software zurueck. .EXAMPLE Get-DSM7PolicyStatisticsByTarget -Name "Software" -LDAPPath "Global Software Library/SwFolder1/SwFolder2" .NOTES .LINK Get-DSM7PolicyList .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Copy-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [system.string]$Name, [system.int32]$ID, [system.string]$LDAPPath = "" ) if (Confirm-Connect) { if ($ID -or $Name) { if ($ID -eq 0) { $ID = (Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$Name)$DSM7Targets)" -LDAPPath $LDAPPath).ID } $result = Get-DSM7PolicyStatisticsByTargetObject -ID $ID return $result } } } Export-ModuleMember -Function Get-DSM7PolicyStatisticsByTarget function Get-DSM7PolicyStatisticsObject { [CmdletBinding()] param ( $Object ) try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicyStatistics" $Webrequest.Policy = $Object $Webresult = $DSM7WebService.GetPolicyStatistics($Webrequest).Histogram return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7PolicyStatistics { <# .SYNOPSIS Gibt eine Statistik von einer Policy zurueck. .DESCRIPTION Gibt eine Statistik von einer Policy zurueck. .EXAMPLE Get-DSM7PolicyStatistics -ID 123456 .NOTES .LINK Get-DSM7PolicyList .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Copy-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [system.string]$ID ) if (Confirm-Connect) { if ($ID) { $result = Get-DSM7PolicyStatisticsObject -Object $(Get-DSM7PolicyObject -ID $ID) return Convert-DSM7StatiscstoPSObject($result) } } } Export-ModuleMember -Function Get-DSM7PolicyStatistics function Get-DSM7PolicyStatisticsByPoliciesObject { [CmdletBinding()] param ( [system.array]$IDs ) try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicyStatisticsByPolicies" $Webrequest.PolicyIds = $IDs $Webresult = $DSM7WebService.GetPolicyStatisticsByPolicies($Webrequest).HistogramsByPolicyIds return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7PolicyStatisticsByPolicies { <# .SYNOPSIS Gibt eine Statistik von einer Software zurueck. .DESCRIPTION Gibt eine Statistik von einer Software zurueck. .EXAMPLE Get-DSM7PolicyStatisticsByTarget -Name "Software" -LDAPPath "Global Software Library/SwFolder1/SwFolder2" .NOTES .LINK Get-DSM7PolicyList .LINK Remove-DSM7Policy .LINK New-DSM7Policy .LINK Copy-DSM7Policy .LINK Add-DSM7PolicyToTarget .LINK Move-DSM7PolicyToTarget .LINK Update-DSM7Policy .LINK Get-DSM7PolicyListByTarget .LINK Get-DSM7PolicyListByAssignedSoftware .LINK Copy-DSM7PolicyListNewTarget .LINK Get-DSM7PolicyStatisticsByTarget .LINK Get-DSM7PolicyStatistics #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.array]$IDs ) if (Confirm-Connect) { $result = Get-DSM7PolicyStatisticsByPoliciesObject -ID $ID return $result } } Export-ModuleMember -Function Get-DSM7PolicyStatisticsByPolicies ############################################################################### # DSM7 Funktionen - Computer <-> ComputerMissingPatch function Get-DSM7ComputerMissingPatch { <# .SYNOPSIS Gibt die festgestellten Sicherheitsluecken zurueck. .DESCRIPTION Gibt die festgestellten Sicherheitsluecken zurueck. .EXAMPLE Get-DSM7ComputerMissingPatch -Name "Computername" .NOTES .LINK Get-DSM7ComputerMissingPatch #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [int32]$ID, [Parameter(Position=1, Mandatory=$false)] [system.string]$Name ) if (Confirm-Connect) { try { if ($ID -lt 1) { $ID = $(Get-DSM7Computer -Name $Name).ID } else { $Name = $(Get-DSM7Computer -ID $ID).Name } if ($ID) { $result = Get-DSM7AssociationList -SchemaTag "ComputerMissingPatch" -SourceObjectID $ID if ($result) { Write-Log 0 "($Name) erfolgreich." $MyInvocation.MyCommand $IDs = @() foreach ($Patch in $result) { if ($Patch."ComputerMissingPatch.Status" -eq 0) { $IDs += $Patch.TargetObjectID } } $result = Get-DSM7SoftwareIDs -IDs $IDs return $result } else { Write-Log 1 "($Name) keine Sicherheitsluecken vorhanden!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "($Name$ID) nicht erfolgreich!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7ComputerMissingPatch ############################################################################### # DSM7 Funktionen - Policy Instance function Get-DSM7PolicyInstanceCountByPolicyObject { [CmdletBinding()] param ( [system.string]$ID, [system.string]$ComplianceState ) try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicyInstanceCountByPolicy" $Webrequest.PolicyId = $ID if ($ComplianceState) { $Webrequest.FilterCriteria = New-Object $DSM7Types["PolicyInstanceFilterCriteria"] $Webrequest.FilterCriteria.ComplianceStates = $ComplianceState } $Webresult = $DSM7WebService.GetPolicyInstanceCountByPolicy($Webrequest).NumberOfResults return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7PolicyInstanceCountByPolicy { <# .SYNOPSIS Gibt eine Statistik von einer Policy zurueck. .DESCRIPTION Gibt eine Statistik von einer Policy zurueck. .EXAMPLE Get-DSM7PolicyInstanceCountByPolicy -ID 123456 -ComplianceState Compliant .NOTES .LINK Get-DSM7PolicyInstanceCountByPolicy .LINK Get-DSM7PolicyInstanceListByNode .LINK Update-DSM7PolicyInstance #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.string]$ID, [Parameter(Position=1, Mandatory=$false)] [ValidateSet("Undefined","Compliant","NotCompliant","CompliancePending","NotPossible","ClientSidePrerequisitesFailed")] [system.string]$ComplianceState ) if (Confirm-Connect) { if ($ID -or $Name) { $result = Get-DSM7PolicyInstanceCountByPolicyObject -ID $ID -ComplianceState $ComplianceState return $result } } } Export-ModuleMember -Function Get-DSM7PolicyInstanceCountByPolicy function Get-DSM7PolicyInstanceListByNodeObject { [CmdletBinding()] param ( [system.string]$ID ) try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicyInstanceListByNode" $Webrequest.NodeID = $ID $Webresult = $DSM7WebService.GetPolicyInstanceListByNode($Webrequest).PolicyInstanceList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7PolicyInstanceListByNode { <# .SYNOPSIS Gibt eine Liste PolicyInstances von Objekten zurueck. .DESCRIPTION Gibt eine Liste PolicyInstances von Objekten zurueck. .EXAMPLE Get-DSM7PolicyInstanceListByNode -Name "%Computername%" .NOTES .LINK Get-DSM7PolicyInstanceCountByPolicy .LINK Get-DSM7PolicyInstanceListByNode .LINK Update-DSM7PolicyInstance #> [CmdletBinding()] param ( [system.string]$Name, [system.string]$ID, [system.string]$LDAPPath = "", [switch]$resolvedName = $false ) if (Confirm-Connect) { if ($ID -or $Name) { if ($Name) { $ID = (Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$Name))" -LDAPPath $LDAPPath).ID } $result = Get-DSM7PolicyInstanceListByNodeObject -ID $ID if ($result) { Write-Log 0 "PolicyInstances am Object $ID!" $MyInvocation.MyCommand $result = Convert-DSM7PolicyInstanceListtoPSObject -resolvedName:$resolvedName $result return $result } else { Write-Log 1 "Keine PolicyInstances vorhanden am Object $ID!" $MyInvocation.MyCommand return $false } } } } Export-ModuleMember -Function Get-DSM7PolicyInstanceListByNode function Update-DSM7PolicyInstanceListObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $PolicyInstanceList ) try { $Webrequest = Get-DSM7RequestHeader -action "UpdatePolicyInstanceList" $Webrequest.PolicyInstanceListToUpdate = $PolicyInstanceList $Webresult = $DSM7WebService.UpdatePolicyInstanceList($Webrequest).UpdatedPolicyInstanceList $policyInstanceIDs = $PolicyInstanceList| select -ExpandProperty PolicyID return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7PolicyInstanceListByPolicyObject { [CmdletBinding()] param ( [system.string]$ID ) try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicyInstanceListByPolicy" $Webrequest.PolicyId = $ID $Webresult = $DSM7WebService.GetPolicyInstanceListByPolicy($Webrequest).PolicyInstanceList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7PolicyInstanceListByPolicy { <# .SYNOPSIS Gibt eine Liste PolicyInstances von Policys zurueck. .DESCRIPTION Gibt eine Liste PolicyInstances von Policys zurueck. .EXAMPLE Get-DSM7PolicyInstanceListByPolicy -ID 123456" .NOTES .LINK Get-DSM7PolicyInstanceCountByPolicy .LINK Get-DSM7PolicyInstanceListByNode .LINK Update-DSM7PolicyInstance #> [CmdletBinding()] param ( [system.string]$ID, [switch]$resolvedName = $false ) if (Confirm-Connect) { if ($ID) { $result = Get-DSM7PolicyInstanceListByPolicyObject -ID $ID if ($result) { Write-Log 0 "PolicyInstances bei Policy $ID!" $MyInvocation.MyCommand $result = Convert-DSM7PolicyInstanceListtoPSObject -resolvedName:$resolvedName $result return $result } else { Write-Log 1 "Keine PolicyInstances vorhanden am Object $ID!" $MyInvocation.MyCommand return $false } } } } Export-ModuleMember -Function Get-DSM7PolicyInstanceListByPolicy function Get-DSM7PolicyInstancesObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $IDs ) try { $Webrequest = Get-DSM7RequestHeader -action "GetPolicyInstances" $Webrequest.PolicyInstanceIds = $IDs $Webresult = $DSM7WebService.GetPolicyInstances($Webrequest).PolicyInstanceList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Remove-DSM7PolicyInstanceListObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $Policy, [Parameter(Position=1, Mandatory=$true)] $PolicyInstance ) try { $Webrequest = Get-DSM7RequestHeader -action "DeletePolicyInstance" $Webrequest.Policy = $Policy $Webrequest.PolicyInstanceToDelete = $PolicyInstance $Webresult = $DSM7WebService.DeletePolicyInstance($Webrequest) $policyInstanceID = $PolicyInstance.ID return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Update-DSM7PolicyInstances { <# .SYNOPSIS aendert eine PolicyInstances. .DESCRIPTION aendert eine PolicyInstances. .EXAMPLE Update-DSM7PolicyInstances -ID 123456,65141 -active .EXAMPLE Update-DSM7PolicyInstances -ID 123456,65141 -reinstall .NOTES .LINK Get-DSM7PolicyInstanceCountByPolicy .LINK Get-DSM7PolicyInstanceListByNode .LINK Update-DSM7PolicyInstances #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $IDs, [switch]$active, [switch]$reinstall ) if (Confirm-Connect) { $PolicyInstanceList = Get-DSM7PolicyInstancesObject -IDs $IDs if ($PolicyInstanceList) { foreach ($PolicyInstance in $PolicyInstanceList) { if ($active) { $PolicyInstance.IsActive = $active Write-Log 0 "Policy Instance aktiviert ID ($($PolicyInstance.ID))" $MyInvocation.MyCommand } if ($reinstall) { if ($DSM7Version -gt "7.3.0") { $PolicyInstance.ReinstallRequestNumber++ } else { if ($PolicyInstance.ExecutionMode -eq 0) { $PolicyInstance.ExecutionMode = 4 } if ($PolicyInstance.ExecutionMode -eq 4) { $PolicyInstance.ServerRolloutState = 3 } } Write-Log 0 "Policy Instance reinstall ID ($($PolicyInstance.ID))" $MyInvocation.MyCommand } } $result = Update-DSM7PolicyInstanceListObject $PolicyInstanceList if ($result) { $result = $true } else { $result = $false } return $result } else { Write-Log 1 "Keine Policy Instance gefunden!!!" $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Update-DSM7PolicyInstances function Remove-DSM7PolicyInstance { <# .SYNOPSIS Loescht eine PolicyInstance. .DESCRIPTION Loescht eine PolicyInstance. .EXAMPLE Remove-DSM7PolicyInstance -ID 123456 .NOTES .LINK Get-DSM7PolicyInstanceCountByPolicy .LINK Get-DSM7PolicyInstanceListByNode .LINK Update-DSM7PolicyInstances .LINK Remove-DSM7PolicyInstance #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $ID ) if (Confirm-Connect) { $PolicyInstance = Get-DSM7PolicyInstancesObject -IDs $ID $Policy = Get-DSM7PolicyObject -ID $PolicyInstance.PolicyID $result = Remove-DSM7PolicyInstanceListObject -Policy $Policy -PolicyInstance $PolicyInstance if ($result) { Write-Log 0 "Alle Policyinstancen geloescht." $MyInvocation.MyCommand $result = $true } else { Write-Log 1 "Fehler beim Policyinstancen geloeschen!" $MyInvocation.MyCommand $result = $false } return $result } } Export-ModuleMember -Function Remove-DSM7PolicyInstance function Update-DSM7PolicyInstancesActive { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $ID ) $policyInstancelist = Get-DSM7PolicyInstanceListByNode -ID $ID -resolvedName $policyInstanceIDs = $policyInstancelist| where {$_.IsActive -eq $false}|select -ExpandProperty ID if ($policyInstanceIDs) { foreach ($ID in $policyInstanceIDs) { $PolicyName = $($policyInstancelist| where {$_.ID -eq $($ID)}).AssignedObjectName Write-Log 0 "$PolicyName - soll aktiviert werden." $MyInvocation.MyCommand } $result = Update-DSM7PolicyInstances -IDs $policyInstanceIDs -active if ($result) { Write-Log 0 "Alle inaktiven Policyinstancen aktiviert." $MyInvocation.MyCommand } } else { Write-Log 1 "Keine inaktiven Policyinstancen gefunden." $MyInvocation.MyCommand } } function Upgrade-DSM7PolicyInstancesByNodeObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $NodeId ) try { $Webrequest = Get-DSM7RequestHeader -action "UpgradePolicyInstancesByNode" $Webrequest.NodeId = $NodeId $Webresult = $DSM7WebService.UpgradePolicyInstancesByNode($Webrequest).UpdatedPolicyInstanceList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7SwInstallationConfigurationsObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [Array]$IDs ) try { $Webrequest = Get-DSM7RequestHeader -action "GetSwInstallationConfigurations" $Webrequest.InstallationConfigurationIds = $IDs $Webresult = $DSM7WebService.GetSwInstallationConfigurations($Webrequest).InstallationConfigurations return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } Export-ModuleMember -Function Get-DSM7SwInstallationConfigurationsObject ############################################################################### # DSM7 Funktionen - Software function Get-DSM7SoftwareIDs { <# .SYNOPSIS Gibt ein Software Objekte zurueck. .DESCRIPTION Gibt ein Software Objekte zurueck. .EXAMPLE Get-DSM7SoftwareIDs -IDs 12345,123456 .NOTES .LINK Get-DSM7SoftwareList .LINK Get-DSM7SoftwareIDs .LINK Get-DSM7Software .LINK Update-DSM7Software .LINK Get-DSM7SoftwareCategoryList .LINK Get-DSM7SoftwareCategory .LINK New-DSM7SoftwareCategory .LINK Update-DSM7SoftwareCategory .LINK Remove-DSM7SoftwareCategory .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $IDs ) if (Confirm-Connect) { try { $SoftwareList = Get-DSM7ObjectsObject -IDs $IDs if ($SoftwareList) { Write-Log 0 "(...) erfolgreich." $MyInvocation.MyCommand $SoftwareList = Convert-DSM7ObjectListtoPSObject($SoftwareList) return $SoftwareList } else { Write-Log 1 "(...) nicht erfolgreich." $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Set-Alias Get-DSM7SoftwarebyIDs Get-DSM7SoftwareIDs Export-ModuleMember -Function Get-DSM7SoftwareIDs -Alias Get-DSM7SoftwarebyIDs function Get-DSM7Software { <# .SYNOPSIS Gibt ein Software Objekt zurueck. .DESCRIPTION Gibt ein Software Objekt zurueck. .EXAMPLE Get-DSM7Software -Name "Software" -LDAPPath ""Global Software Library/SWF1" .NOTES .LINK Get-DSM7SoftwareList .LINK Get-DSM7SoftwareIDs .LINK Get-DSM7Software .LINK Update-DSM7Software .LINK Move-DSM7Software .LINK Get-DSM7SoftwareCategoryList .LINK Get-DSM7SoftwareCategory .LINK New-DSM7SoftwareCategory .LINK Update-DSM7SoftwareCategory .LINK Remove-DSM7SoftwareCategory .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.int32]$ID, [Parameter(Position=1, Mandatory=$false)] [system.string]$Name, [Parameter(Position=2, Mandatory=$false)] [system.string]$UniqueID, [Parameter(Position=2, Mandatory=$false)] [system.string]$UpdateID, [Parameter(Position=3, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=4, Mandatory=$false)] [switch]$IsLastReleasedRev ) if (Confirm-Connect) { try { $SoftwareListID = $ID if ($Name) { $Name = Convert-StringtoLDAPString($Name) if ($IsLastReleasedRev) { $SoftwareList = Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$Name)(Software.IsLastReleasedRev=1)(BasePropGroupTag=Software))" -LDAPPath $LDAPPath } else { $SoftwareList = Get-DSM7ObjectList -Filter "(&(Name:IgnoreCase=$Name)(Software.IsLastRevision=1)(BasePropGroupTag=Software))" -LDAPPath $LDAPPath } if ($SoftwareList.count -gt 1) { Write-Log 1 "($Name) nicht eindeutig. Bitte LDAPPath nutzen!" $MyInvocation.MyCommand return $false } $SoftwareListID = $SoftwareList.ID } if ($UniqueID) { if ($IsLastReleasedRev) { $SoftwareList = Get-DSM7ObjectList -Filter "(&(UniqueID:IgnoreCase=$UniqueID)(Software.IsLastReleasedRev=1)(BasePropGroupTag=Software))" } else { $SoftwareList = Get-DSM7ObjectList -Filter "(&(UniqueID:IgnoreCase=$UniqueID)(Software.IsLastRevision=1)(BasePropGroupTag=Software))" } $SoftwareListID = $SoftwareList.ID } if ($UpdateID) { if ($IsLastReleasedRev) { $SoftwareList = Get-DSM7ObjectList -Filter "(&(PatchPackage.UpdateId:IgnoreCase=$UpdateID)(Software.IsLastReleasedRev=1)(BasePropGroupTag=Software))" } else { $SoftwareList = Get-DSM7ObjectList -Filter "(&(PatchPackage.UpdateId:IgnoreCase=$UpdateID)(Software.IsLastRevision=1)(BasePropGroupTag=Software))" } $SoftwareListID = $SoftwareList.ID } if ($SoftwareListID) { $Software = Get-DSM7ObjectObject -ID $SoftwareListID $Software = Convert-Dsm7ObjecttoPSObject($Software) if ($Software) { Write-Log 0 "($($Software.Name)) erfolgreich." $MyInvocation.MyCommand return $Software } else { Write-Log 1 "($($Software.Name)) nicht erfolgreich." $MyInvocation.MyCommand return $false } } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7Software function Move-DSM7Software { <# .SYNOPSIS Verschiebt ein Softwareobjekt. .DESCRIPTION Verschiebt ein Softwareobjekt. .EXAMPLE Move-DSM7Software -Name "%Softwarename%" -toLDAPPath "Global Software Library/Folder1/Folder2" .EXAMPLE Move-DSM7Software -ID 12345 -toLDAPPathID 12345 .EXAMPLE Move-DSM7Software -UniqueID "{UniqueID}" -toLDAPPath "Global Software Library/Folder1/Folder2" .NOTES .LINK Get-DSM7SoftwareList .LINK Get-DSM7SoftwareIDs .LINK Get-DSM7Software .LINK Update-DSM7Software .LINK Move-DSM7Software .LINK Get-DSM7SoftwareCategoryList .LINK Get-DSM7SoftwareCategory .LINK New-DSM7SoftwareCategory .LINK Update-DSM7SoftwareCategory .LINK Remove-DSM7SoftwareCategory .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=1, Mandatory=$false)] [System.String]$UniqueID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.string]$toLDAPPath, [Parameter(Position=4, Mandatory=$false)] [Int]$toLDAPPathID ) if (Confirm-Connect) { try { if (($Name -or $ID -gt 0 -or $UniqueID) -and ($toLDAPPath -or $toLDAPPathID -gt 0) ) { if ($ID -eq 0) { if ($UniqueID) { $search = Get-DSM7Software -UniqueID $UniqueID } else { $search = Get-DSM7Software -Name $Name -LDAPPath $LDAPPath -UniqueID } if ($search) { $ID = $search.ID } else { Write-Log 1 "Software kann nicht nach ($toLDAPPath) verschoben werden!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { if ($toLDAPPathID -gt 0) { $ParentContID = $toLDAPPathID } else { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $toLDAPPath } $Object = Get-DSM7ObjectObject -ID $ID if ($Object) { if ($Object.ParentContID -eq $ParentContID) { Write-Log 1 "Software ($($Object.Name)) befindet sich schon in ($($Object.ParentContID))." $MyInvocation.MyCommand return $false } else { $result = Move-DSM7Object -Object $Object -ParentContID $ParentContID if ($result) { $result = Convert-DSM7ObjecttoPSObject($result) Write-Log 0 "Software ($($result.Name)) erfolgreich nach ($($result.ParentContID)) verschoben." $MyInvocation.MyCommand return $true } else { return $false } } } else { Write-Log 1 "Software kann nicht nach ($toLDAPPath$toLDAPPathID) verschoben werden." $MyInvocation.MyCommand } } } else { Write-Log 1 "Name, UniqueID oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Move-DSM7Software function Update-DSM7Software { <# .SYNOPSIS aendert das Softwareobjekt. .DESCRIPTION aendert das Softwareobjekt. .EXAMPLE Update-DSM7Software -Name "Software" -Values @("Name=neuerName") .NOTES .LINK Get-DSM7SoftwareList .LINK Get-DSM7SoftwareIDs .LINK Get-DSM7Software .LINK Update-DSM7Software .LINK Move-DSM7Software .LINK Get-DSM7SoftwareCategoryList .LINK Get-DSM7SoftwareCategory .LINK New-DSM7SoftwareCategory .LINK Update-DSM7SoftwareCategory .LINK Remove-DSM7SoftwareCategory .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [system.string]$Name, [system.string]$UniqueID, [int]$ID, [system.string]$LDAPPath, [string[]]$Values, [switch]$LDAP = $false ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0 -or $UniqueID) { if ($ID -eq 0 -and !$UniqueID) { $search = Get-DSM7Software -Name $Name -LDAPPath $LDAPPath if ($search) { $ID = $search.ID } else { Write-Log 1 "Aenderung kann nicht erfolgen!" $MyInvocation.MyCommand return $false } } if ($UniqueID) { $SoftwareList = Get-DSM7ObjectList -Filter "(&(UniqueID:IgnoreCase=$UniqueID)(Software.IsLastRevision=1)(BasePropGroupTag=Software))" -LDAPPath $LDAPPath $ID = $SoftwareList.ID } if ($ID -gt 0) { $Software = Get-DSM7ObjectObject -ID $ID $result = Update-DSM7Object -Object $Software -Values $Values if ($result) { $result = Convert-DSM7ObjecttoPSObject($result) -LDAP:$LDAP Write-Log 0 "($($Software.Name)) erfolgreich." $MyInvocation.MyCommand return $result } else { return $false } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Update-DSM7Software function Get-DSM7SoftwareList { <# .SYNOPSIS Gibt eine Liste von Software zurueck. .DESCRIPTION Gibt eine Liste von Software zurueck. .EXAMPLE Get-DSM7SoftwareList -LDAPPath "Global Software Library/SwFolder1/SwFolder2" -recursive .NOTES .LINK Get-DSM7SoftwareList .LINK Get-DSM7SoftwareIDs .LINK Get-DSM7Software .LINK Update-DSM7Software .LINK Move-DSM7Software .LINK Get-DSM7SoftwareCategoryList .LINK Get-DSM7SoftwareCategory .LINK New-DSM7SoftwareCategory .LINK Update-DSM7SoftwareCategory .LINK Remove-DSM7SoftwareCategory .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [system.string]$Attributes, [system.string]$Filter, [system.string]$LDAPPath = "", [int]$ParentContID, [switch]$GenTypeData = $false, [switch]$recursive = $false ) if (Confirm-Connect) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($recursive) { if ($ParentContID -gt 0) { $result = @() $resultSoftware = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(BasePropGroupTag=Software)$filter)" -ParentContID $ParentContID -GenTypeData:$GenTypeData if ($resultSoftware) { $result += $resultSoftware } $resultContainer = Get-DSM7ObjectList -Filter $DSM7StructureSoftware -ParentContID $ParentContID -recursive if ($resultContainer) { foreach ($Container in $resultContainer) { $FilterContainer = "(&(ParentContID=$($Container.ID))(BasePropGroupTag=Software)$filter)" $resultSoftware = Get-DSM7ObjectList -Attributes $Attributes -Filter $FilterContainer -GenTypeData:$GenTypeData if ($resultSoftware) { $result += $resultSoftware } } } else { $FilterContainer = "(&(ParentContID=$ParentContID)(BasePropGroupTag=Software)$filter)" $result = Get-DSM7ObjectList -Attributes $Attributes -Filter $FilterContainer } } else { Write-Log 1 "($LDAPPath) nicht gefunden!" $MyInvocation.MyCommand return $false } } else { if ($ParentContID -gt 0) { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(BasePropGroupTag=Software)$filter)" -ParentContID $ParentContID -GenTypeData:$GenTypeData } else { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(BasePropGroupTag=Software)$filter)" -GenTypeData:$GenTypeData } } if ($result) { return $result } else { return $false } } } Export-ModuleMember -Function Get-DSM7SoftwareList function Get-DSM7SoftwareCategoryList { <# .SYNOPSIS Gibt Softwarekategorien zurueck. .DESCRIPTION Gibt Softwarekategorien zurueck. .EXAMPLE Get-DSM7SoftwareCategoryList -LDAPPath "Global Software Library/Patch Library" -recursive .NOTES .LINK Get-DSM7SoftwareList .LINK Get-DSM7SoftwareIDs .LINK Get-DSM7Software .LINK Update-DSM7Software .LINK Move-DSM7Software .LINK Get-DSM7SoftwareCategoryList .LINK Get-DSM7SoftwareCategory .LINK New-DSM7SoftwareCategory .LINK Update-DSM7SoftwareCategory .LINK Remove-DSM7SoftwareCategory .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Attributes, [Parameter(Position=1, Mandatory=$false)] [system.string]$Filter, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath = "", [Parameter(Position=3, Mandatory=$false)] [int]$ParentContID, [Parameter(Position=4, Mandatory=$false)] [switch]$GenTypeData = $false, [Parameter(Position=5, Mandatory=$false)] [switch]$recursive = $false ) if (Confirm-Connect) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($Attributes) { $Attributes = $Attributes + ",SwCategory.TargetCategory" } else { $Attributes = "SwCategory.TargetCategory" } if ($recursive) { if ($ParentContID -gt 0) { $result = @() $resultCategory = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(BasePropGroupTag=SwCategory)$Filter)" -ParentContID $ParentContID -GenTypeData:$GenTypeData if ($resultCategory) { $result += $resultCategory } $resultContainer = Get-DSM7ObjectList -Filter $DSM7Container -ParentContID $ParentContID -recursive foreach ($Container in $resultContainer) { $FilterContainer = "(&(ParentContID=$($Container.ID))(BasePropGroupTag=SwCategory)$filter)" $resultCategory = Get-DSM7ObjectList -Attributes $Attributes -Filter $FilterContainer -GenTypeData:$GenTypeData if ($resultCategory) { $result += $resultCategory } } } else { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(BasePropGroupTag=SwCategory)$Filter)" -ParentContID $ParentContID -GenTypeData:$GenTypeData } } else { if ($ParentContID -gt 0) { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(BasePropGroupTag=SwCategory)$Filter)" -ParentContID $ParentContID -GenTypeData:$GenTypeData } else { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(BasePropGroupTag=SwCategory)$Filter)" -GenTypeData:$GenTypeData } } if ($result) { return $result } else { return $false } } } Export-ModuleMember -Function Get-DSM7SoftwareCategoryList function Get-DSM7SoftwareCategory { <# .SYNOPSIS Gibt ein Softwarekategorie zurueck. .DESCRIPTION Gibt ein Softwarekategorie zurueck. .EXAMPLE Get-DSM7SoftwareCategory -ID 1234 .EXAMPLE Get-DSM7SoftwareCategory -Name "Softwarekategorie" -LDAPPath "Global Software Library/Application Library" .NOTES .LINK Get-DSM7SoftwareList .LINK Get-DSM7SoftwareIDs .LINK Get-DSM7Software .LINK Update-DSM7Software .LINK Move-DSM7Software .LINK Get-DSM7SoftwareCategoryList .LINK Get-DSM7SoftwareCategory .LINK New-DSM7SoftwareCategory .LINK Update-DSM7SoftwareCategory .LINK Remove-DSM7SoftwareCategory .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [int]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.string]$ParentContID, [Parameter(Position=4, Mandatory=$false)] [switch]$resolvedName = $false, [switch]$LDAP = $false ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($ID -eq 0) { $Name = Convert-StringtoLDAPString $Name $Filter = "(&(Name:IgnoreCase=$Name)(BasePropGroupTag=SWCategory))" $search = Get-DSM7ObjectList -Filter $Filter -ParentContID $ParentContID if ($search -and $search.Count -le 1) { $ID = $search.ID } else { Write-Log 1 "Softwarekategorie nicht gefunden!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { $Object = Get-DSM7ObjectObject -ID $ID if ($Object) { $result = Convert-DSM7ObjecttoPSObject($Object) -LDAP:$LDAP Write-Log 0 "($($Object.Name)) erfolgreich." $MyInvocation.MyCommand if ($resolvedName) { foreach ($line in $result.'DynamicSwCategoryProps.Filter'.split(")")) { $lineIn = $line.TrimStart("(").TrimStart("|").TrimStart("&").TrimStart("(") $linepara = $lineIn.split("=") if ($linepara[0].contains("ContainedIn") -or $linepara[0].contains("ListOfIntContains") -or $linepara[0].contains("WhereResultIsSource")) { [system.Array]$IDs += $linepara[1].split(",") } } add-member -inputobject $result -MemberType NoteProperty -name 'DynamicSwCategoryProps.FilterName' -Value $result.'DynamicSwCategoryProps.Filter' if ($IDs){ $NameIDs = get-dsm7objects -IDs $IDs -ObjectGroupType "Catalog" foreach ($NameID in $NameIDs) { $StringName = Convert-StringtoLDAPString $NameID.Name $regex = [Regex]$NameID.ID $result.'DynamicSwCategoryProps.FilterName' = $regex.Replace($result.'DynamicSwCategoryProps.FilterName',$StringName,1) } } } return $result } else { Write-Log 1 "($ID) nicht gefunden!" $MyInvocation.MyCommand return $false } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7SoftwareCategory function New-DSM7SoftwareCategory { <# .SYNOPSIS Erstellt eine Softwarekategorie. .DESCRIPTION Erstellt eine Softwarekategorie. .EXAMPLE New-DSM7SoftwareCategory -Name "Softwarekategorie" -Typ "User" -LDAPPath "Global Software Library/Application Library" .EXAMPLE New-DSM7SoftwareCategory -Name "Softwarekategorie" -SchemaTag "DynamicSwCategory" -LDAPPath "Global Software Library/Application Library" -Filter "(Name=Test)" .EXAMPLE New-DSM7SoftwareCategory -Name "Softwarekategorie" -SchemaTag "PatchMgmtRuleFilter" .EXAMPLE New-DSM7SoftwareCategory -Name "Softwarekategorie" -SchemaTag "DynamicPatchMgmtRuleFilter" -Filter "(Name=Test)" .NOTES .LINK Get-DSM7SoftwareList .LINK Get-DSM7SoftwareIDs .LINK Get-DSM7Software .LINK Update-DSM7Software .LINK Move-DSM7Software .LINK Get-DSM7SoftwareCategoryList .LINK Get-DSM7SoftwareCategory .LINK New-DSM7SoftwareCategory .LINK Update-DSM7SoftwareCategory .LINK Remove-DSM7SoftwareCategory .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$Description, [Parameter(Position=2, Mandatory=$false)] [ValidateSet("SwCategory","PatchMgmtRuleFilter","DynamicSwCategory","DynamicPatchMgmtRuleFilter")] [system.string]$SchemaTag = "SwCategory", [Parameter(Position=3, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=4, Mandatory=$false)] [system.string]$ParentContID, [Parameter(Position=5, Mandatory=$false)] [system.string]$ParentDynGroup, [Parameter(Position=7, Mandatory=$false)] [system.string]$Filter, [Parameter(Position=8, Mandatory=$false)] [switch]$resolvedName = $false, [switch]$lastCat = $false, [switch]$PatchLink ) if (Confirm-Connect) { try { $CreateGroup = $false if ($PatchLink) { $PatchMgmtRuleFilterTyp = "LPRPatchPackage" $PatchMgmtLicense = "DSM7_LUMENSION_PATCH" } else { $PatchMgmtRuleFilterTyp = "VMWPPatchPackage" $PatchMgmtLicense = "DSM7_ADV_PATCH" } if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($SchemaTag -eq "DynamicPatchMgmtRuleFilter" -or $SchemaTag -eq "DynamicSwCategory") { if ($resolvedName) { $FilterLine = Convert-LDAPStringToReplaceString $Filter foreach ($line in $FilterLine.split(")")) { $lineIn = $line.TrimStart("(").TrimStart("|").TrimStart("&").TrimStart("(") $linepara = $lineIn.split("=") if ($linepara[0].contains("ContainedIn") -or $linepara[0].contains("ListOfIntContains")) { if ($linepara[0].contains('PatchPackage.Products')) {$PatchSchema = "PatchProduct"} if ($linepara[0].contains('PatchPackage.ProductFamily')) {$PatchSchema = "PatchProductFamily"} foreach ($LineName in $linepara[1].split(",")){ $LineName = Convert-ReplaceStringToLDAPString $LineName [System.Array]$FilterName = Get-DSM7ObjectList -LDAProot "<LDAP://rootCatalog>" -Filter "(&(Name=$LineName)(PatchCategoryObject.RequiredLicense=$PatchMgmtLicense)(SchemaTag=$PatchSchema)(BasePropGroupTag=PatchCategoryObject))" -Attributes "PatchCategoryObject.RequiredLicense" if ($FilterName -and $FilterName.count -gt 0) { $LineName = $LineName.replace("\","\\\") $LineName = $LineName.replace("+","\+") $LineName = $LineName.replace("-","\-") $regex = [Regex]$LineName if ($FilterName.count -gt 1) { if ($lastCat) { $Filter = $regex.Replace($Filter,$FilterName[-1].ID,1) } else { Write-Log 1 "Konnte Filter ($Filter) nicht aufloesen, mehrere Objekte vorhanden ($($FilterName.count))!!!" $MyInvocation.MyCommand } } else { $Filter = $regex.Replace($Filter,$FilterName.ID,1) } } else { Write-Log 1 "Konnte Filter ($Filter) nicht aufloesen!!!" $MyInvocation.MyCommand return $false } } } } Write-Log 0 "Neuer Filter ist ($Filter)." $MyInvocation.MyCommand } } if ($SchemaTag -eq "DynamicPatchMgmtRuleFilter" -or $SchemaTag -eq "PatchMgmtRuleFilter") { $ParentContID = Get-DSM7LDAPPathID -LDAPPath "Global Software Library/Patch Library" } if ($ParentContID -gt 0) { $PropGroupList = @() switch ($SchemaTag) { "DynamicSwCategory" { if ($Filter) {$CreateGroup = $true} $PropertyList = @() $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfString"] $PropertyListObject.Tag = "Filter" $PropertyListObject.Type = "String" $PropertyListObject.TypedValue = $Filter $PropertyList += $PropertyListObject $PropGroupListObject = New-Object $DSM7Types["MdsPropGroup"] $PropGroupListObject.Tag = "DynamicSwCategoryProps" $PropGroupListObject.PropertyList = $PropertyList $PropGroupList += $PropGroupListObject $PropertyList = @() $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfString"] $PropertyListObject.Tag = "TargetCategory" $PropertyListObject.Type = "String" $PropertyListObject.TypedValue = "Software" $PropertyList += $PropertyListObject $PropGroupListObject = New-Object $DSM7Types["MdsPropGroup"] $PropGroupListObject.Tag = "SwCategory" $PropGroupListObject.PropertyList = $PropertyList $PropGroupList += $PropGroupListObject } "DynamicPatchMgmtRuleFilter" { if ($Filter) {$CreateGroup = $true} $PropertyList = @() $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfString"] $PropertyListObject.Tag = "Filter" $PropertyListObject.Type = "String" $PropertyListObject.TypedValue = $Filter $PropertyList += $PropertyListObject $PropGroupListObject = New-Object $DSM7Types["MdsPropGroup"] $PropGroupListObject.Tag = "DynamicSwCategoryProps" $PropGroupListObject.PropertyList = $PropertyList $PropGroupList += $PropGroupListObject $PropertyList = @() $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfString"] $PropertyListObject.Tag = "TargetCategory" $PropertyListObject.Type = "String" $PropertyListObject.TypedValue = $PatchMgmtRuleFilterTyp $PropertyList += $PropertyListObject $PropGroupListObject = New-Object $DSM7Types["MdsPropGroup"] $PropGroupListObject.Tag = "SwCategory" $PropGroupListObject.PropertyList = $PropertyList $PropGroupList += $PropGroupListObject } "SwCategory" { $CreateGroup = $true $PropertyList = @() $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfString"] $PropertyListObject.Tag = "TargetCategory" $PropertyListObject.Type = "String" $PropertyListObject.TypedValue = "Software" $PropertyList += $PropertyListObject $PropGroupListObject = New-Object $DSM7Types["MdsPropGroup"] $PropGroupListObject.Tag = "SwCategory" $PropGroupListObject.PropertyList = $PropertyList $PropGroupList += $PropGroupListObject } "PatchMgmtRuleFilter" { $PropertyList = @() $PropertyListObject = New-Object $DSM7Types["MdsTypedPropertyOfString"] $PropertyListObject.Tag = "TargetCategory" $PropertyListObject.Type = "String" $PropertyListObject.TypedValue = $PatchMgmtRuleFilterTyp $PropertyList += $PropertyListObject $PropGroupListObject = New-Object $DSM7Types["MdsPropGroup"] $PropGroupListObject.Tag = "SwCategory" $PropGroupListObject.PropertyList = $PropertyList $PropGroupList += $PropGroupListObject } default {} } if ($CreateGroup) { $Object = New-DSM7Object -Name $Name -ParentContID $ParentContID -PropGroupList $PropGroupList -SchemaTag $SchemaTag if ($Object) { Write-Log 0 "Kategorie ($Name) wurde erstellt." $MyInvocation.MyCommand $Object = Convert-DSM7ObjectListtoPSObject($Object) return $Object } else { Write-Log 1 "Kategorie konnte nicht erstellt werden!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Gruppen kann nicht erstellt werden!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "LDAPPath nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function New-DSM7SoftwareCategory function Update-DSM7SoftwareCategory { <# .SYNOPSIS aendert eine Softwarekategorie. .DESCRIPTION aendert eine Softwarekategorie. .EXAMPLE Update-DSM7SoftwareCategory -Name "Softwarekategorie" -LDAPPath "Global Software Library/Application Library" -Filter "(Name=Test)" .NOTES .LINK Get-DSM7SoftwareList .LINK Get-DSM7SoftwareIDs .LINK Get-DSM7Software .LINK Update-DSM7Software .LINK Move-DSM7Software .LINK Get-DSM7SoftwareCategoryList .LINK Get-DSM7SoftwareCategory .LINK New-DSM7SoftwareCategory .LINK Update-DSM7SoftwareCategory .LINK Remove-DSM7SoftwareCategory .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$Description, [Parameter(Position=2, Mandatory=$false)] [int]$ID, [Parameter(Position=3, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=4, Mandatory=$false)] [system.string]$ParentContID, [Parameter(Position=5, Mandatory=$false)] [system.string]$Filter, [Parameter(Position=6, Mandatory=$false)] [switch]$resolvedName = $false, [Parameter(Position=7, Mandatory=$false)] [switch]$lastCat = $false, [Parameter(Position=8, Mandatory=$false)] [system.string]$NewName ) if (Confirm-Connect) { try { $Values = @() if ($Name -or $ID -gt 0) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($ID -eq 0) { $Category = Get-DSM7SoftwareCategory -Name $Name -ParentContID $ParentContID if ($Category) { $ID = $Category.ID } } $Category = Get-DSM7ObjectObject -ID $ID if ($Category.PatchMgmtRuleFilterTyp -eq "LPRPatchPackage" ) { $PatchMgmtLicense = "DSM7_LUMENSION_PATCH" } else { $PatchMgmtLicense = "DSM7_ADV_PATCH" } if ($Category.SchemaTag -eq "DynamicPatchMgmtRuleFilter" -or $Category.SchemaTag -eq "DynamicSwCategory") { if ($resolvedName -and $Filter) { $FilterLine = Convert-LDAPStringToReplaceString $Filter foreach ($line in $FilterLine.split(")")) { $lineIn = $line.TrimStart("(").TrimStart("|").TrimStart("&").TrimStart("(") $linepara = $lineIn.split("=") if ($linepara[0].contains("ContainedIn") -or $linepara[0].contains("ListOfIntContains")) { if ($linepara[0].contains('PatchPackage.Products')) {$PatchSchema = "PatchProduct"} if ($linepara[0].contains('PatchPackage.ProductFamily')) {$PatchSchema = "PatchProductFamily"} foreach ($LineName in $linepara[1].split(",")){ $LineName = Convert-ReplaceStringToLDAPString $LineName [System.Array]$FilterName = Get-DSM7ObjectList -LDAProot "<LDAP://rootCatalog>" -Filter "(&(Name=$LineName)(PatchCategoryObject.RequiredLicense=$PatchMgmtLicense)(SchemaTag=$PatchSchema)(BasePropGroupTag=PatchCategoryObject))" -Attributes "PatchCategoryObject.RequiredLicense" if ($FilterName -and $FilterName.count -gt 0) { $LineName = $LineName.replace("\","\\\") $LineName = $LineName.replace("+","\+") $LineName = $LineName.replace("-","\-") $regex = [Regex]$LineName if ($FilterName.count -gt 1) { if ($lastCat) { $Filter = $regex.Replace($Filter,$FilterName[-1].ID,1) } else { Write-Log 1 "Konnte Filter ($Filter) nicht aufloesen, mehrere Objekte vorhanden ($($FilterName.count))!!!" $MyInvocation.MyCommand } } else { $Filter = $regex.Replace($Filter,$FilterName.ID,1) } } else { Write-Log 1 "Konnte Filter ($Filter) nicht aufloesen!!!" $MyInvocation.MyCommand return $false } } } } Write-Log 0 "Neuer Filter ist ($Filter)." $MyInvocation.MyCommand } } if ($Category) { switch ($Category.SchemaTag) { "DynamicSwCategory" { if ($Filter) { $Values += "DynamicSwCategoryProps.Filter="+$Filter } } "DynamicPatchMgmtRuleFilter" { if ($Filter) { $Values += "DynamicSwCategoryProps.Filter="+$Filter } } default {} } if ($Description) { $Category.Description = $Description } if ($NewName) { $Category.Name = $NewName } $Object = Update-DSM7Object -Object $Category -Values $Values if ($Object) { Write-Log 0 "Softwarekategorie ($($Object.Name)) wurde geaendert." $MyInvocation.MyCommand $Object = Convert-DSM7ObjectListtoPSObject($Object) return $Object } else { Write-Log 1 "Softwarekategorie konnte nicht geaendert werden!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "LDAPPath nicht angegeben!!!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Update-DSM7SoftwareCategory function Remove-DSM7SoftwareCategory { <# .SYNOPSIS Loescht eine Softwarekategorie. .DESCRIPTION Loescht eine Softwarekategorie. .EXAMPLE Remove-DSM7SoftwareCategory -ID 1234 .EXAMPLE Remove-DSM7SoftwareCategory -Name "Softwarekategorie" -LDAPPath "Global Software Library/Application Library" .NOTES .LINK Get-DSM7SoftwareList .LINK Get-DSM7SoftwareIDs .LINK Get-DSM7Software .LINK Update-DSM7Software .LINK Move-DSM7Software .LINK Get-DSM7SoftwareCategoryList .LINK Get-DSM7SoftwareCategory .LINK New-DSM7SoftwareCategory .LINK Update-DSM7SoftwareCategory .LINK Remove-DSM7SoftwareCategory .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [System.Int32]$ID, [Parameter(Position=2, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=3, Mandatory=$false)] [system.string]$ParentContID ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($ID -eq 0) { $Filter = "(&(Name:IgnoreCase=$Name)(BasePropGroupTag=SWCategory))" $search = Get-DSM7ObjectList -Filter $Filter -ParentContID $ParentContID if ($search -and $search.Count -le 1) { $ID = $search.ID } else { Write-Log 1 "Softwarekategorie nicht gefunden!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { $Object = Get-DSM7ObjectObject -ID $ID if ($Object) { $result = Remove-DSM7Object -Object $Object Write-Log 0 "($($Object.Name)) erfolgreich geloescht." $MyInvocation.MyCommand return $result } else { Write-Log 1 "($ID) nicht gefunden!" $MyInvocation.MyCommand return $false } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Remove-DSM7SoftwareCategory function Get-DSM7SwInstallationParamDefinitions { <# .SYNOPSIS Gibt von einem Softwarepaket die Parameter Definition zurueck. .DESCRIPTION Gibt von einem Softwarepaket die Parameter Definition zurueck. .EXAMPLE Get-DSM7SwInstallationParamDefinitions -ID 1234 .EXAMPLE Get-DSM7SwInstallationParamDefinitions -Name "Softwarekategorie" -LDAPPath "Global Software Library/Application Library" .NOTES .LINK Get-DSM7SoftwareList .LINK Get-DSM7SoftwareIDs .LINK Get-DSM7Software .LINK Update-DSM7Software .LINK Move-DSM7Software .LINK Get-DSM7SwInstallationParamDefinitions .LINK Get-DSM7SoftwareCategoryList .LINK Get-DSM7SoftwareCategory .LINK New-DSM7SoftwareCategory .LINK Update-DSM7SoftwareCategory .LINK Remove-DSM7SoftwareCategory .LINK Get-DSM7GroupMembers .LINK Get-DSM7ListOfMemberships .LINK Update-DSM7MembershipInGroups .LINK Update-DSM7MemberListOfGroup #> [CmdletBinding()] param ( [system.string]$Name, [system.string]$UniqueID, [int]$ID, [system.string]$LDAPPath, [string[]]$Values, [switch]$resolvedName, [switch]$LDAP = $false ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0 -or $UniqueID) { if ($ID -eq 0 -and !$UniqueID) { $search = Get-DSM7Software -Name $Name -LDAPPath $LDAPPath if ($search) { $ID = $search.ID } else { Write-Log 1 "Nicht gefunden!" $MyInvocation.MyCommand return $false } } if ($UniqueID) { $SoftwareList = Get-DSM7ObjectList -Filter "(&(UniqueID:IgnoreCase=$UniqueID)(Software.IsLastRevision=1)(BasePropGroupTag=Software))" -LDAPPath $LDAPPath $ID = $SoftwareList.ID } if ($ID -gt 0) { $Software = Get-DSM7ObjectObject -ID $ID $SoftwareParamDef = Get-DSM7SwInstallationParamDefinitionsObject $Software if ($SoftwareParamDef) { $SoftwareParamDef = Convert-DSM7SwInstallationParamDefinitionstoPSObjects -DSM7Objects $SoftwareParamDef -resolvedName:$resolvedName Write-Log 0 "Parameter zu Software ($($Software.Name)) gefunden." $MyInvocation.MyCommand return $SoftwareParamDef } else { Write-Log 1 "Nicht gefunden!" $MyInvocation.MyCommand return $false } } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7SwInstallationParamDefinitions function Get-DSM7SwInstallationParamDefinitionsObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $Object ) try { $Webrequest = Get-DSM7RequestHeader -action "GetSwInstallationParamDefinitions" $Webrequest.ObjectToQuery = $Object $Webresult = $DSM7WebService.GetSwInstallationParamDefinitions($Webrequest).InstallationParameterDefinitions return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Add-DSM7SwInstallationParamDefinitionsObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $UniqueID, [Parameter(Position=1, Mandatory=$true)] $Name, [Parameter(Position=1, Mandatory=$false)] $Values, [Parameter(Position=2, Mandatory=$true)] $InstallationParamType = "String" , [Parameter(Position=2, Mandatory=$false)] $LocigalCategory ) try { $Webrequest = Get-DSM7RequestHeader -action "AddSwInstallationParamDefinition" $Webrequest.SwInstallationParamDefinitionToAdd = New-Object $DSM7Types["MdsSWInstallationParamDef"] $Webrequest.SwInstallationParamDefinitionToAdd.UniqueID = $UniqueID $Webrequest.SwInstallationParamDefinitionToAdd.Tag = $Name $Webrequest.SwInstallationParamDefinitionToAdd.InstallationParamType = $InstallationParamType $Webrequest.SwInstallationParamDefinitionToAdd.IdProvider = "enteo" $Webrequest.SwInstallationParamDefinitionToAdd.SoftwareRevision = 1 $DisplayNameList = @() $DisplayName = New-Object $DSM7Types["MdsDisplayName"] $DisplayName.CultureCode ="de" $DisplayName.Representation ="Test456" $DisplayNameList += $DisplayName $Webrequest.SwInstallationParamDefinitionToAdd.DisplayNameList = $DisplayNameList $LocigalCategory = @() $DisplayName = New-Object $DSM7Types["MdsDisplayName"] $DisplayName.CultureCode ="de" $DisplayName.Representation ="Test456" $LocigalCategory += $DisplayName $Webrequest.SwInstallationParamDefinitionToAdd.LocigalCategory = $LocigalCategory $PredefinedValues = @() $PredefinedValue = New-Object $DSM7Types["MdsSWIPPredefinedValue"] $PredefinedValue.PredefinedValue ="Test" $PredefinedValueDisplayNameList = @() $PredefinedValueDisplayName = New-Object $DSM7Types["MdsDisplayName"] $PredefinedValueDisplayName.CultureCode ="de" $PredefinedValueDisplayName.Representation ="Test456" $PredefinedValueDisplayNameList += $PredefinedValueDisplayName $PredefinedValue.DisplayNameList = $PredefinedValueDisplayNameList $PredefinedValues += $PredefinedValue $Webrequest.SwInstallationParamDefinitionToAdd.PredefinedValueList = $PredefinedValues $Webresult = $DSM7WebService.AddSwInstallationParamDefinition($Webrequest).AddedSwInstallationParamDefinition Write-Log 0 "($NodeId) erfolgreich." $MyInvocation.MyCommand return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Remove-DSM7SwInstallationParamDefinitionsObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $Object ) try { $Webrequest = Get-DSM7RequestHeader -action "DeleteSwInstallationParamDefinition" $Webrequest.SwInstallationParamDefinitionToDelete = $Object $Webresult = $DSM7WebService.DeleteSwInstallationParamDefinition($Webrequest) return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7DepotStatesOfPackage { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [int32]$ID ) $result = Get-DSM7DepotStatesOfPackageObject -ID $ID return $result } #Export-ModuleMember -Function Get-DSM7DepotStatesOfPackage function Get-DSM7DepotStatesOfPackageObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] [int32]$ID ) try { $Webrequest = Get-DSM7RequestHeader -action "GetDepotStatesOfPackage" $Webrequest.PackageId = $ID $Webresult = $DSM7WebService.GetDepotStatesOfPackage($Webrequest).DepotStates return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } ############################################################################### # DSM7 Funktionen - Variablen function Get-DSM7ResolveVariablesForTargetObject { [CmdletBinding()] param ( [int]$ID ) try { $Webrequest = Get-DSM7RequestHeader -action "ResolveVariablesForTarget" $Webrequest.TargetObjectId = $ID $Webresult = $DSM7WebService.ResolveVariablesForTarget($Webrequest).ResolvedVariableValues return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7ResolveVariablesForTarget { <# .SYNOPSIS Gibt eine Liste von Variablen eines Objektes zurueck. .DESCRIPTION Gibt eine Liste von Variablen eines Objektes zurueck. .EXAMPLE Get-DSM7ResolveVariablesForTarget -TargetID 123 Get-DSM7ResolveVariablesForTarget -TargetName %Computer% .NOTES .LINK Get-DSM7VariableGroups .LINK Get-DSM7ResolveVariablesForTarget .LINK Set-DSM7VariablesOnTarget .LINK Remove-DSM7VariablesOnTarget #> [CmdletBinding()] param ( [int]$TargetID, [system.string]$TargetName, [system.string]$LDAPPath ) if (Confirm-Connect) { try { if (!$TargetID) { $search = Get-DSM7ObjectList -Filter "(Name:IgnoreCase=$TargetName)" -LDAPPath $LDAPPath if ($search.count -gt 1) { Write-Log 1 "($TargetName) nicht eindeutig. Bitte LDAPPath nutzen!" $MyInvocation.MyCommand return $false } else { $TargetID = $search.ID } } if ($TargetID) { $Variables = Get-DSM7ResolveVariablesForTargetObject -ID $TargetID $Variables = Convert-DSM7VariabletoPSObjects -DSM7Objects $Variables Write-Log 0 "Variablen fuer Ziel ID ($TargetID) ermittelt." $MyInvocation.MyCommand return $Variables } else { Write-Log 1 "($TargetName/$TargetID) nicht gefunden!" $MyInvocation.MyCommand return $false } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7ResolveVariablesForTarget function Get-DSM7VariableGroupsObject { [CmdletBinding()] param ( $Names ) try { $Webrequest = Get-DSM7RequestHeader -action "GetVariableGroups" $Webrequest.VariableGroupTags = $Names $Webresult = $DSM7WebService.GetVariableGroups($Webrequest).VariableGroups return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7VariableGroups { <# .SYNOPSIS Gibt eine Liste von Variablen Gruppen und deren Variablen zurueck. .DESCRIPTION Gibt eine Liste von Variablen Gruppen und deren Variablen zurueck. .EXAMPLE Get-DSM7VariableGroups Groups .NOTES .LINK Get-DSM7VariableGroups .LINK Get-DSM7ResolveVariablesForTarget .LINK Set-DSM7VariablesOnTarget .LINK Remove-DSM7VariablesOnTarget #> [CmdletBinding()] param ( $Names ) if (Confirm-Connect) { try { $VariableGroups = Get-DSM7VariableGroupsObject -Names $Names $VariableGroups = Convert-DSM7VariableGrouptoPSObject $VariableGroups Write-Log 0 "($Names) erfolgreich." $MyInvocation.MyCommand return $VariableGroups } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7VariableGroups function Set-DSM7VariablesOnTargetObject { [CmdletBinding()] param ( $TargetID, $VariableSets ) try { $Webrequest = Get-DSM7RequestHeader -action "SetVariablesOnTarget" $Webrequest.TargetObjectId = $TargetID $Webrequest.Assignments = $VariableSets $Webresult = $DSM7WebService.SetVariablesOnTarget($Webrequest) return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Set-DSM7VariablesOnTarget { <# .SYNOPSIS Setzt eine Liste von Variablen eines Objektes. .DESCRIPTION Setzt eine Liste von Variablen eines Objektes. .EXAMPLE Get-DSM7ResolveVariablesForTarget -TargetID 123 Get-DSM7ResolveVariablesForTarget -TargetName %Computer% .NOTES .LINK Get-DSM7VariableGroups .LINK Get-DSM7ResolveVariablesForTarget .LINK Set-DSM7VariablesOnTarget .LINK Remove-DSM7VariablesOnTarget #> [CmdletBinding()] param ( [int]$TargetID, [system.string]$TargetName, [system.string]$LDAPPath, [Parameter(Position=2, Mandatory=$true)] [system.array]$Variables ) if (Confirm-Connect) { try { if (!$TargetID) { $search = Get-DSM7ObjectList -Filter "(Name:IgnoreCase=$TargetName)" -LDAPPath $LDAPPath $TargetID = $search.ID if ($search.count -gt 1) { Write-Log 1 "($TargetName) nicht eindeutig. Bitte LDAPPath nutzen!" $MyInvocation.MyCommand return $false } } if ($TargetID) { $VariableGroups = Get-DSM7VariableGroups foreach ($Variable in $Variables) { $VariableNameGroup = $Variable.split("=",2)[0] $VariableValue = $Variable.split("=",2)[1] $VariableGroup = $VariableNameGroup.split(".")[0] $VariableName = $VariableNameGroup.split(".")[1] $VariableID = $($VariableGroups|where {$_.Tag -eq $VariableName -and $_.GroupTag -eq $VariableGroup}).ID if ($VariableID) { $VariableSet = New-Object $DSM7Types["MdsVariableValueAssignment"] $VariableSet.VariableId = $VariableID $VariableSet.Value=$VariableValue $VariableSets += @($VariableSet) $VariableSetsName += @("$VariableGroup.$VariableName=$VariableValue") } else { Write-Log 1 "Name ($VariableName) in Gruppe ($VariableGroup) nicht gefunden!" $MyInvocation.MyCommand } } if ($VariableSets) { $result = Set-DSM7VariablesOnTargetObject -TargetID $TargetID -VariableSets $VariableSets if ($result) { Write-Log 0 "Variablen ($VariableSetsName) Ziel ($TargetID) gesetzt." $MyInvocation.MyCommand } } else { Write-Log 1 "keine Variablen gefunden!" $MyInvocation.MyCommand $result = $false } } else { Write-Log 1 "kein Ziel gefunden!" $MyInvocation.MyCommand $result = $false } return $result } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Set-DSM7VariablesOnTarget function Remove-DSM7VariablesOnTargetObject { [CmdletBinding()] param ( $TargetID, $VariableIDs ) try { $Webrequest = Get-DSM7RequestHeader -action "RemoveVariablesFromTarget" $Webrequest.TargetObjectId = $TargetID $Webrequest.VariableId = $VariableIDs $Webresult = $DSM7WebService.RemoveVariablesFromTarget($Webrequest) return $true } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Remove-DSM7VariablesOnTarget { <# .SYNOPSIS Loesche eine Liste von Variablen an einem Objektes. .DESCRIPTION Loesche eine Liste von Variablen an eimem Objektes. .EXAMPLE Get-DSM7ResolveVariablesForTarget -TargetID 123 Get-DSM7ResolveVariablesForTarget -TargetName %Computer% .NOTES .LINK Get-DSM7VariableGroups .LINK Get-DSM7ResolveVariablesForTarget .LINK Set-DSM7VariablesOnTarget .LINK Remove-DSM7VariablesOnTarget #> [CmdletBinding()] param ( [int]$TargetID, [system.string]$TargetName, [system.string]$LDAPPath, [Parameter(Position=2, Mandatory=$true)] [system.array]$Variables ) if (Confirm-Connect) { try { if (!$TargetID) { $search = Get-DSM7ObjectList -Filter "(Name:IgnoreCase=$TargetName)" -LDAPPath $LDAPPath $TargetID = $search.ID if ($search.count -gt 1) { Write-Log 1 "($TargetName) nicht eindeutig. Bitte LDAPPath nutzen!" $MyInvocation.MyCommand return $false } } if ($TargetID) { $VariableGroups = Get-DSM7VariableGroups foreach ($Variable in $Variables) { $VariableGroup = $Variable.split(".")[0] $VariableName = $Variable.split(".")[1] $VariableID = $($VariableGroups|where {$_.Tag -eq $VariableName -and $_.GroupTag -eq $VariableGroup}).ID if ($VariableID) { $VariableIDs += @($VariableID) } else { Write-Log 1 "Name ($VariableName) in Gruppe ($VariableGroup) nicht gefunden!" $MyInvocation.MyCommand } } if ($VariableIDs) { $result = Remove-DSM7VariablesOnTargetObject -TargetID $TargetID -VariableIDs $VariableIDs if ($result) { Write-Log 0 "Variablen ($VariableIDs) Ziel ($TargetID) von entfernt!" $MyInvocation.MyCommand } } else { Write-Log 1 "keine Variablen gefunden!" $MyInvocation.MyCommand $result = $false } } else { Write-Log 1 "kein Ziel gefunden!" $MyInvocation.MyCommand $result = $false } return $result } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Remove-DSM7VariablesOnTarget ############################################################################### # DSM7 Funktionen - Schema function Get-DSM7ObjectSchemaListObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] $Names = @() ) try { $IDs = $IDs|Sort-Object|Get-Unique $Webrequest = Get-DSM7RequestHeader -action "GetObjectSchemaList" $Webrequest.Schematags = $Names $Webresult = $DSM7WebService.GetObjectSchemaList($Webrequest).SchemaList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7PropGroupDefListObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] $Names = @() ) try { $IDs = $IDs|Sort-Object|Get-Unique $Webrequest = Get-DSM7RequestHeader -action "GetPropGroupDefList" $Webrequest.PropGroupTags = $Names $Webresult = $DSM7WebService.GetPropGroupDefList($Webrequest).PropGroupDefList return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } function Get-DSM7DisplayNameListsObject { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$true)] $IDs = @() ) try { $IDs = $IDs|Sort-Object|Get-Unique $Webrequest = Get-DSM7RequestHeader -action "GetDisplayNameLists" $Webrequest.DisplayNameIds = $IDs $Webresult = $DSM7WebService.GetDisplayNameLists($Webrequest).DisplayNames return $Webresult } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } ############################################################################### # DSM7 Funktionen - Computer - Benutzer ############################################################################### function Add-DSM7ComputerToUser { <# .SYNOPSIS Ordnet einem Computer einen Benutzer zu. .DESCRIPTION Ordnet einem Computer einen Benutzer zu. .EXAMPLE Add-DSM7ComputerToUser -ID x -UserID y .EXAMPLE Add-DSM7ComputerToUser -Name %Computername% -Username %Username% .EXAMPLE Add-DSM7ComputerToUser -Name %Computername% -UserUniqueID %SID% .NOTES .LINK Add-DSM7ComputerToUser .LINK Remove-DSM7ComputerToUser #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.int32]$ID, [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=2, Mandatory=$false)] [system.int32]$UserID, [Parameter(Position=2, Mandatory=$false)] [system.string]$UserName, [Parameter(Position=2, Mandatory=$false)] [system.string]$UserUniqueID, [Parameter(Position=3, Mandatory=$false)] [system.string]$UserLDAPPath ) if (Confirm-Connect) { if ($DSM7Version -gt "7.3.2") { if (!$ID) { $ID = (Get-DSM7Computer -Name $Name -LDAPPath $LDAPPath).ID } if (!$UserID) { if ($UserName) { $UserID = (Get-DSM7User -Name $UserName -LDAPPath $UserLDAPPath).ID } if ($UserUniqueID) { $UserID = (Get-DSM7User -UniqueID $UserUniqueID -LDAPPath $UserLDAPPath).ID } } if ($ID -and $UserID) { $result = New-DSM7AssociationObject -SchemaTag "ComputerAssociatedUser" -SourceObjectID $ID -TargetObjectID $UserID -TargetSchemaTag "User" if ($result) { Write-Log 0 "Computer ($ID) zu Benutzer ($UserID) erfolgreich hinzugefuegt." $MyInvocation.MyCommand $result = Convert-DSM7AssociationtoPSObject($result) return $result } else { Write-Log 1 "Computer ($ID) ist schon zu Benutzer ($UserID) zugeordnet!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Computer ($ID) nicht zu Benutzer ($UserID) hinzugefuegt." $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Funktion nicht in der Version vorhanden!" $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Add-DSM7ComputerToUser function Get-DSM7ComputerToUser { <# .SYNOPSIS Gibt die zugeordneten Benutzer zu einem Computer zurueck. .DESCRIPTION Gibt die zugeordneten Benutzer zu einem Computer zurueck. .EXAMPLE Get-DSM7ComputerToUser -ID x .EXAMPLE Get-DSM7ComputerToUser -UserID x .NOTES .LINK Add-DSM7ComputerToUser .LINK Remove-DSM7ComputerToUser .LINK Get-DSM7ComputerToUser #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.int32]$ID, [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=2, Mandatory=$false)] [system.int32]$UserID, [Parameter(Position=2, Mandatory=$false)] [system.string]$UserName, [Parameter(Position=2, Mandatory=$false)] [system.string]$UserUniqueID, [Parameter(Position=3, Mandatory=$false)] [system.string]$UserLDAPPath ) if (Confirm-Connect) { if ($DSM7Version -gt "7.3.2") { if (!$ID) { $ID = (Get-DSM7Computer -Name $Name -LDAPPath $LDAPPath).ID } if (!$UserID) { if ($UserName) { $UserID = (Get-DSM7User -Name $UserName -LDAPPath $UserLDAPPath).ID } if ($UserUniqueID) { $UserID = (Get-DSM7User -UniqueID $UserUniqueID -LDAPPath $UserLDAPPath).ID } } if ($ID -or $UserID) { if ($ID) { $result = Get-DSM7AssociationList -SchemaTag "ComputerAssociatedUser" -SourceObjectID $ID } if ($result) { Write-Log 0 "Computer ($ID) hat zugehoerige Benutzer." $MyInvocation.MyCommand $result = Convert-DSM7AssociationListtoPSObject($result) -resolvedName return $result } else { Write-Log 1 "Computer ($ID) hat keine Benutzer!" $MyInvocation.MyCommand return $false } if ($UserID) { $result = Get-DSM7AssociationList -SchemaTag "ComputerAssociatedUser" -TargetObjectID $UserID -TargetSchemaTag "User" } if ($result) { Write-Log 0 "Benutzer ($UserID) ist Computern zugeordnet." $MyInvocation.MyCommand $result = Convert-DSM7AssociationListtoPSObject($result) -resolvedName return $result } else { Write-Log 1 "Benutzer ($ID) keinem Computer zugeordnet!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Computer ($ID) oder Benutzer ($UserID) nicht angeben." $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Funktion nicht in der Version vorhanden!" $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7ComputerToUser function Get-DSM7ComputerToUserList { <# .SYNOPSIS Gibt die Liste zugeordneten Benutzer zu Computer zurueck. .DESCRIPTION Gibt die Liste zugeordneten Benutzer zu Computer zurueck. .EXAMPLE Get-DSM7ComputerToUserList .NOTES .LINK Add-DSM7ComputerToUser .LINK Remove-DSM7ComputerToUser .LINK Get-DSM7ComputerToUser .LINK Get-DSM7ComputerToUserList #> if (Confirm-Connect) { $result = Get-DSM7AssociationList -SchemaTag "ComputerAssociatedUser" if ($result) { Write-Log 0 "Liste fertig." $MyInvocation.MyCommand $result = Convert-DSM7AssociationListtoPSObject($result) -resolvedName return $result } else { Write-Log 1 "Es gibt keine zugeordneten Benutzer zu Computern!" $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7ComputerToUserList function Remove-DSM7ComputerToUser { <# .SYNOPSIS Ordnet einem Computer einen Benutzer zu. .DESCRIPTION Ordnet einem Computer einen Benutzer zu. .EXAMPLE Remove-DSM7ComputerToUser -ID x -UserID y .EXAMPLE Remove-DSM7ComputerToUser -Name %Computername% -Username %Username% .EXAMPLE Remove-DSM7ComputerToUser -Name %Computername% -UserUniqueID %SID% .NOTES .LINK Add-DSM7ComputerToUser .LINK Remove-DSM7ComputerToUser #> [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=$false)] [system.int32]$ID, [Parameter(Position=0, Mandatory=$false)] [system.string]$Name, [Parameter(Position=1, Mandatory=$false)] [system.string]$LDAPPath, [Parameter(Position=2, Mandatory=$false)] [system.int32]$UserID, [Parameter(Position=2, Mandatory=$false)] [system.string]$UserName, [Parameter(Position=2, Mandatory=$false)] [system.string]$UserUniqueID, [Parameter(Position=3, Mandatory=$false)] [system.string]$UserLDAPPath ) if (Confirm-Connect) { if ($DSM7Version -gt "7.3.2") { if (!$ID) { $ID = (Get-DSM7Computer -Name $Name -LDAPPath $LDAPPath).ID } if (!$UserID) { if ($UserName) { $UserID = (Get-DSM7User -Name $UserName -LDAPPath $UserLDAPPath).ID } if ($UserUniqueID) { $UserID = (Get-DSM7User -UniqueID $UserUniqueID -LDAPPath $UserLDAPPath).ID } } if ($ID -and $UserID) { $Object = Get-DSM7AssociationListObject -SchemaTag "ComputerAssociatedUser" -SourceObjectID $ID -TargetObjectID $UserID -TargetSchemaTag "User" $result = Remove-DSM7AssociationObject -Object $Object if ($result) { Write-Log 0 "Computer ($ID) zu Benutzer ($UserID) erfolgreich entfernt." $MyInvocation.MyCommand return $result } else { Write-Log 1 "Computer ($ID) ist nicht zu Benutzer ($UserID) zugeordnet!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Computer ($ID) nicht zu Benutzer ($UserID) entfernt." $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Funktion nicht in der Version vorhanden!" $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Remove-DSM7ComputerToUser ############################################################################### # DSM7 Funktionen - Benutzer ############################################################################### function Get-DSM7UserList { <# .SYNOPSIS Gibt eine Liste von User zurueck. .DESCRIPTION Gibt eine Liste von User zurueck. .EXAMPLE Get-DSM7UserList -LDAPPath "Managed Users & Computers/OU1/OU2" -recursive .NOTES .LINK Get-DSM7UserList .LINK Get-DSM7User #> [CmdletBinding()] param ( [system.string]$Attributes, [system.string]$Filter, [system.string]$LDAPPath = "", [int]$ParentContID, [switch]$GenTypeData = $false, [switch]$recursive = $false ) if (Confirm-Connect) { if ($LDAPPath) { $ParentContID = Get-DSM7LDAPPathID -LDAPPath $LDAPPath } if ($recursive) { if ($ParentContID -gt 0) { $result = @() $resultUser = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(SchemaTag=User)$Filter)" -ParentContID $ParentContID -GenTypeData:$GenTypeData if ($resultUser) { $result += $resultUser } $resultContainer = Get-DSM7ObjectList -Filter $DSM7Container -ParentContID $ParentContID -recursive foreach ($Container in $resultContainer) { $FilterContainer = "(&(ParentContID=$($Container.ID))(SchemaTag=User)$filter)" $resultUser = Get-DSM7ObjectList -Attributes $Attributes -Filter $FilterContainer if ($resultUser) { $result += $resultUser } } } else { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(SchemaTag=User)$Filter)" -ParentContID $ParentContID -GenTypeData:$GenTypeData } } else { if ($ParentContID -gt 0) { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(SchemaTag=User)$Filter)" -ParentContID $ParentContID -GenTypeData:$GenTypeData } else { $result = Get-DSM7ObjectList -Attributes $Attributes -Filter "(&(SchemaTag=User)$Filter)" -GenTypeData:$GenTypeData } } if ($result) { return $result } else { return $false } } } Export-ModuleMember -Function Get-DSM7UserList function Get-DSM7User { <# .SYNOPSIS Gibt das Benutzerobjekt zurueck. .DESCRIPTION Gibt das Benutzerobjekt zurueck. .EXAMPLE Get-DSM7User -Name "%Benutzer%" .EXAMPLE Get-DSM7User -ID 1234 .EXAMPLE Get-DSM7User -UniqueID %SID% .EXAMPLE Get-DSM7User -Name "%Benutzer%" -LDAPPath "Managed Users & Computers/domaene/loc/Benutzer" .NOTES .LINK Get-DSM7User .LINK Get-DSM7UserList #> [CmdletBinding()] param ( [int]$ID, [system.string]$Name, [system.string]$UniqueID, [system.string]$LDAPPath, [switch]$LDAP = $false ) if (Confirm-Connect) { try { if ($Name -or $ID -gt 0 -or $UniqueID -gt 0) { if ($ID -eq 0 -and !$UniqueID) { $Name = Convert-StringtoLDAPString($Name) $search = Get-DSM7ObjectList -Filter "(Name:IgnoreCase=$Name)(Schematag=User)" -LDAPPath $LDAPPath if ($search.Count -lt 2) { $ID = $search.ID } else { Write-Log 2 "($Name) nicht eindeutig bitte LDAPPath benutzen!" $MyInvocation.MyCommand return $false } } if ($UniqueID) { $search = Get-DSM7ObjectList -Filter "(UniqueID:IgnoreCase=$UniqueID)(Schematag=User)" -LDAPPath $LDAPPath if ($search.Count -lt 2) { $ID = $search.ID } else { Write-Log 2 "($Name) nicht eindeutig bitte LDAPPath benutzen!" $MyInvocation.MyCommand return $false } } if ($ID -gt 0) { $result = Get-DSM7ObjectObject -ID $ID if ($result) { $result = Convert-DSM7ObjecttoPSObject($result) -LDAP:$LDAP Write-Log 0 "($($result.Name)) erfolgreich." $MyInvocation.MyCommand return $result } else { Write-Log 1 "Benutzer nicht gefunden!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Benutzer nicht gefunden!" $MyInvocation.MyCommand return $false } } else { Write-Log 1 "Name oder ID nicht angegeben!!!" $MyInvocation.MyCommand } } catch [system.exception] { Write-Log 2 $_ $MyInvocation.MyCommand return $false } } } Export-ModuleMember -Function Get-DSM7User ############################################################################### # DSM7 Funktionen - NCP ############################################################################### function Get-DSM7NCP { <# .SYNOPSIS Gibt das NCP als XML zurueck. .DESCRIPTION Gibt das NCP als XML zurueck. .EXAMPLE Get-DSM7NCP .NOTES .LINK Get-DSM7NCPObjects .LINK Get-DSM7NCP #> [CmdletBinding()] param ( [system.string]$Path, [system.string]$NCPFile, $Credential ) if (!$Path) { $DSM7RegPath = Convert-StringtoPSRegKey $DSM7RegPath -is32Bit Write-Log 0 "Registry DSM Client Base ($DSM7RegPath)." $MyInvocation.MyCommand $DSM7Path = Get-RegistryValue $DSM7RegPath "ServerSourcePath" Write-Log 0 "DSM Server Path: ($DSM7Path)." $MyInvocation.MyCommand } else { $DSM7Path = $Path } Write-Log 0 "DSM Server Path: ($DSM7Path)." $MyInvocation.MyCommand if ($Credential) { New-PSDrive -Name ORG -PSProvider FileSystem -Root $DSM7Path -Credential $Credential |Out-Null } else { New-PSDrive -Name ORG -PSProvider FileSystem -Root $DSM7Path |Out-Null } $DSM7ExportNCPlocal = $NCPFile if (Test-Path "ORG:\$DSM7ExportNCP") { if (Test-Path "ORG:\$DSM7ExportNCPfile") { $NCPFilelastwritetime = [datetime](Get-ItemProperty -Path "ORG:\$DSM7NCPfile" -Name LastWriteTime).lastwritetime Write-Log 0 "Lastwritetime of file $DSM7Path\$DSM7NCPfile ($NCPFilelastwritetime)." $MyInvocation.MyCommand } if (Test-Path "ORG:\$DSM7ExportNCPXML") { $DSM7ExportNCPlastwritetime = [datetime](Get-ItemProperty -Path "ORG:\$DSM7ExportNCPXML" -Name LastWriteTime).lastwritetime Write-Log 0 "Lastwritetime of file $DSM7Path\$DSM7ExportNCPXML ($DSM7ExportNCPlastwritetime)." $MyInvocation.MyCommand } else { [datetime]$DSM7ExportNCPlastwritetime = "1970/01/01" } if ($NCPFilelastwritetime -gt $DSM7ExportNCPlastwritetime ){ Write-Log 0 "Create DSM Export XML.($NCPFilelastwritetime > $DSM7ExportNCPlastwritetime)" $MyInvocation.MyCommand Start-Process -FilePath "ORG:\$DSM7ExportNCP" -Wait } if (!$DSM7ExportNCPlocal) {$DSM7ExportNCPlocal = "$ENV:Temp\$DSM7ExportNCPXML"} if (!(Test-Path $DSM7ExportNCPlocal)) { if (Test-Path "ORG:\$DSM7ExportNCPXML") { Write-Log 0 "Copy $DSM7Path\$DSM7ExportNCPXML to $DSM7ExportNCPlocal." $MyInvocation.MyCommand Copy-Item -Path "ORG:\$DSM7ExportNCPXML" -Destination $DSM7ExportNCPlocal } else { Write-Log 1 "Nicht vorhanden $DSM7Path\$DSM7ExportNCPXML!" $MyInvocation.MyCommand } } else { $DSM7ExportNCPlocallastwritetime = [datetime](Get-ItemProperty -Path $DSM7ExportNCPlocal -Name LastWriteTime).lastwritetime if ($DSM7ExportNCPlocallastwritetime -lt $DSM7ExportNCPlastwritetime ){ Write-Log 0 "Copy $DSM7Path\$DSM7ExportNCPXML to $DSM7ExportNCPlocal." $MyInvocation.MyCommand Copy-Item -Path "ORG:\$DSM7ExportNCPXML" -Destination $DSM7ExportNCPlocal -Force } } } Remove-PSDrive ORG if (test-path $DSM7ExportNCPlocal) { if (remove-XMLSpecialChar -file $DSM7ExportNCPlocal) { $DSMNCP = [XML] (get-content -path $DSM7ExportNCPlocal -Encoding UTF8) } } return $DSMNCP } Export-ModuleMember -Function Get-DSM7NCP function Get-DSM7NCPObjects { <# .SYNOPSIS Gibt das NCP Objekte zurueck. .DESCRIPTION Gibt das NCP Objekt zurueck. .EXAMPLE Get-DSM7NCPObjects -DSMNCP $NCP .NOTES .LINK Get-DSM7NCPObjects .LINK Get-DSM7NCP #> param( [XML]$DSMNCP, [System.Array]$DSMNCPObjects, [system.int32]$ParentID, [array]$object, [string]$Path ) if ($DSMNCP) { $object = $DSMNCP.SelectNodes("//NCPObject")[0] } foreach ($item in $object) { switch ($item.type) { "ORG" {$InfraID = 0} "OU" {$InfraID = 1} "Site" {$InfraID = 2} Default {$InfraID = 9} } $Raw = New-Object PSObject if ($item.Type -eq "MGNT_POINT") {$Name = $item.Name -replace "Management Point " -replace '\(|\)' } else {$Name = $item.Name} add-member -inputobject $Raw -MemberType NoteProperty -name "Name" -Value $Name add-member -inputobject $Raw -MemberType NoteProperty -name "Type" -Value $item.Type add-member -inputobject $Raw -MemberType NoteProperty -name "InfraID" -Value $InfraID add-member -inputobject $Raw -MemberType NoteProperty -name "ID" -Value $item.ID add-member -inputobject $Raw -MemberType NoteProperty -name "Description" -Value $item.Description.value $sections = @() foreach ($section in $item.SECTION) { $RawSection = New-Object PSObject add-member -inputobject $RawSection -MemberType NoteProperty -name "Name" -Value $section.value $Variables = @() foreach ($variable in $section.variable) { $RawVar = New-Object PSObject add-member -inputobject $RawVar -MemberType NoteProperty -name "Name" -Value $variable.Name add-member -inputobject $RawVar -MemberType NoteProperty -name "Type" -Value $variable.type add-member -inputobject $RawVar -MemberType NoteProperty -name "Value" -Value $variable.value add-member -inputobject $RawVar -MemberType NoteProperty -name "Status" -Value $variable.STATUS_SPECIFIED $Variables += $RawVar } add-member -inputobject $RawSection -MemberType NoteProperty -name "Variables" -Value $Variables $sections += $RawSection } add-member -inputobject $Raw -MemberType NoteProperty -name "Sections" -Value $sections add-member -inputobject $Raw -MemberType NoteProperty -name "ParentPath" -Value $Path add-member -inputobject $Raw -MemberType NoteProperty -name "ParentID" -Value $ParentID if ($infraID -lt 4) { $Path = $Path + "/Infra=" + $item.Name } else { $Path = $Path + "/Name=" + $item.Name } $path = $Path.trimstart("/") $DSMCount = ($Path).split("/").count add-member -inputobject $Raw -MemberType NoteProperty -name "DSMCount" -Value $DSMCount -Force foreach ($ncpitem in $item.NCPObject) { $DSMNCPObjects = Get-DSM7NCPObjects -object $ncpitem -Path $Path -ParentID $item.ID -DSMNCPObjects $DSMNCPObjects } $PathSort = $Path -replace " " add-member -inputobject $Raw -MemberType NoteProperty -name "Path" -Value $Path add-member -inputobject $Raw -MemberType NoteProperty -name "PathSort" -Value $PathSort $DSMNCPObjects += $Raw } return $DSMNCPObjects } Export-ModuleMember -Function Get-DSM7NCPObjects # SIG # Begin signature block # MIID6QYJKoZIhvcNAQcCoIID2jCCA9YCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUwlXiYSsNMOv5ljR0dzkDy++h # jM6gggIKMIICBjCCAXOgAwIBAgIQu5sKUC9Qh6ZJ3pWdk+J2LzAJBgUrDgMCHQUA # MBUxEzARBgNVBAMTClV3ZSBGcmFua2UwHhcNMTkxMTI5MTM1MDMyWhcNMzkxMjMx # MjM1OTU5WjAVMRMwEQYDVQQDEwpVd2UgRnJhbmtlMIGfMA0GCSqGSIb3DQEBAQUA # A4GNADCBiQKBgQCtDYV+VqoUSxMgO+is0UUWdyzvWchxX2+JKiuI8vqEz5wdhYdR # qysDT1sBvIHVpkd8Bwg1V5R+t9W9BmLYxugQhcXRrcvH7q6NuQ8Sj4gez5JuVmsI # XHNz82lL0KZalR6o1ShkcsyeMY9WxRobpVD8yGJ2r0T4bW5V1Zbb9eDKTQIDAQAB # o18wXTATBgNVHSUEDDAKBggrBgEFBQcDAzBGBgNVHQEEPzA9gBA5Gm4cEkdUJ8rS # pxcYeU3roRcwFTETMBEGA1UEAxMKVXdlIEZyYW5rZYIQu5sKUC9Qh6ZJ3pWdk+J2 # LzAJBgUrDgMCHQUAA4GBAIYzsiiW7hfNxy5DoGR8ZL5LDo4MQ3P9Zt8KJPux1lcT # /xYTrcvHEdJ0oYfHekhBi43aA7jk1tjtU2kL2VqWlt477q6zxXfgWSJS62kUeKvf # 151usx5IWvaFONFgXwSlTG6lqGD6fkLrtdybMGX03ZgJ6rn6F6S3vdMTvakkCh7x # MYIBSTCCAUUCAQEwKTAVMRMwEQYDVQQDEwpVd2UgRnJhbmtlAhC7mwpQL1CHpkne # lZ2T4nYvMAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkG # CSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEE # AYI3AgEVMCMGCSqGSIb3DQEJBDEWBBQuqMUdwayhSJjUfOZl0W3lB/AuiDANBgkq # hkiG9w0BAQEFAASBgAPdwzzO33Y1lHgd66tQCrPKlaheLK6+x8BpQqXRqJ9MuyHF # fK0k1OnEOFVG+JnkAL5bjSXxSBbV4K7fVQQXDNfQpOfRa+AkM4MU9rqSmfpc0eGR # nNpTsS6Jj+3xQVLo5Sj8U5dxwjXcEuqlqggacQkNPPGHPCk1DPHfK+W6F5CC # SIG # End signature block |