Verschiedene nützliche Powershell Funktionen

Liste aller Outlook und Word Addins

Outlook, bzw. Word muss gestartet sein. Funktioniert für Outlook nur nur, wenn der Benutzer auch ein Outlook Konto hat, in dessen Kontext der Befehl ausgeführt wird.

(New-Object -Com Outlook.Application).COMAddins | select Description,ProgId
(New-Object -Com Word.Application).COMAddins | select Description,ProgId

Registry auf vorhandenen Eintrag prüfen

function Test-RegistryValue {

    param (
        [parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]$Path,

        [parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]$Value
    )
	
	if (-not (test-path $path)) {
		return $false
	}

    try {
        Get-ItemProperty -Path $Path | Select-Object -ExpandProperty $Value -ErrorAction Stop | Out-Null
        return $true
    }
    catch {
        return $false
    }
}

Anmeldestatus von Benutzern auf einem Terminal Server als Objekt

function get-QUserObj($hostname) {

	$benutzer = (quser /server:$hostname | ? { ($_ -notmatch "BENUTZERNAME") -and ($_ -notmatch "admin*") })

	$objUser = @()

	if ($benutzer) {
		
		$benutzer | foreach {
			$tmp = ($_  -split ' +')
			$obj = New-Object -TypeName PSObject
			Add-Member -InputObject $obj -MemberType NoteProperty -Name UserName -Value $tmp[1]
			Add-Member -InputObject $obj -MemberType NoteProperty -Name SessionName -Value $tmp[2]
			Add-Member -InputObject $obj -MemberType NoteProperty -Name ID -Value $tmp[3]
			Add-Member -InputObject $obj -MemberType NoteProperty -Name State -Value $tmp[4]
			Add-Member -InputObject $obj -MemberType NoteProperty -Name IdleTime -Value $tmp[5]
			Add-Member -InputObject $obj -MemberType NoteProperty -Name LogonTime -Value $tmp[6]
			$objUser += $obj
		}
	}

	return $objUser
}

Mit folgendem Befehl kann ein Benutzer zum Beispiel abgemeldet werden:

$users = get-QUserObj($hostname) 
logoff $users[0].SessionName /SERVER:$hostname

Logdatei schreiben

function Write-Log($msg, $logfile) {
$logdate = Get-Date -Format "dd.MM.yyyy HH:mm:ss: "
"$($logdate)$($msg)" | Out-File -Append -FilePath $logfile
}

Auf vorhandenes Windows Update prüfen

function Is-WindowsUpdateInstalled {
    param (
        [parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]$kbid
    )
	
	$kb = get-wmiobject -class win32_quickfixengineering | where {$_.HotFixID -eq "KB$($kbid)"}
	if (!$kb) {
		return $false
	}
	return $true
}

Inhalt von Klammern aus einem String entfernen

function Remove-ParenthesesContent {
  [CmdletBinding()]
  param (
    [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
    [string]$InputString,
    [Parameter(Mandatory=$true)]
    [ValidateSet("Round", "Curly", "Square")]
    [string]$Type
  )
  process {
    switch ($Type) {
      "Round" { $regex = "\s*\(([^()]*)\)\s*"; $replacement = ' ' }
      "Curly" { $regex = "\s*\{([^{}]*)\}\s*"; $replacement = ' ' }
      "Square" { $regex = "\s*\[([^\[\]]*)\]\s*"; $replacement = ' ' }
    }
    $OutputString = $InputString -replace $regex, $replacement
    Write-Output $OutputString
  }
}