By Andreas Nick on Freitag, 10. Juli 2015
Category: Powershell

Powershell Spielereien

Im Laufe der Zeit haben sich einige Skripte, meist zu Testzwecken angesammelt, die aber durchaus nützlich sein können. An dieser Stelle eine veröffentlichung meiner Snipets. Dieser Beitrag kann später noch ergänzt werden.

 Mit einem SecureString kann in Powershell ein verschlüsselter String erzeigt werden. Dieser kann beispielsweise im Dateisystem mit einem Passwort abgelegt werden, um ein gesicherte "RunAs" funktionalität bei einem Invoke-Command zu ermöglichen

$key = (0, 0, 2, 3, 5, 3, 3, 3, 2, 3, 2, 4, 3, 1, 3, 3);
$pass = "Password" | ConvertTo-SecureString  -AsPlainText -Force | ConvertFrom-SecureString -Key $key
#
#$pass = "NAB5AHMAZQBLAHAASgA1AE4AZwBoACsAKwA2AFkAaQB0AFUANABzAHcAPQA9AHwAZAAwADEANgBmAGYAMAAxADEANABiAGMAYwA0ADYAYwBiADIANwBhAGUAOAA0ADQAZgBiADEAMgA5ADIAMwA4ADQANABjAGQANwAwADgANAAzAGMAZgBhADYANwBhADEA"

$env = $pass | ConvertTo-SecureString -Key $key
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($env)
$PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Write-Host "Password is: " $PlainPassword

 Hier ein kleines Beispiel zur Bearbeitung der ACL Access Control List im WIndows Dateisystem mit Powershell

# Andreas Nick 2015
$Folder = "c:\temp"

[System.Reflection.Assembly]::LoadWithPartialName("System.Security.Principal") | Out-Null

$List = get-acl $Folder

$List.Access | ForEach-Object {
    [System.Security.AccessControl.FileSystemAccessRule] $r = $_;
    $r.AccessControlType;
    $AdObj = New-Object System.Security.Principal.NTAccount -ArgumentList $_.IdentityReference
    Write-Host "#######"
    $strSID = $AdObj.Translate([System.Security.Principal.SecurityIdentifier])
    Write-Host "Group :" $_.IdentityReference "     SID:" $strSID.Value
}

$CurrentRightsTable = (get-acl $Folder).GetAccessRules($true, $true, [System.Security.Principal.NTAccount])
$users = @((get-acl "C:\users\Andreas").Access | Select-Object  -ExpandProperty IdentityReference ) | where { $_ -notmatch "Vordefiniert" }
$users

Der folgede Codeschnipsel ist eine echte Spielerei und füllt die Powershell Konsole mit zufälligen Nullen und Einsen

$r = new-object System.Random

for ($x = 0; $x -le 100; $x++) {
    [Sring] $line = ""
    for ($y = 0; $y -le 200; $y++) {
        $line += $r.Next(0, 2).ToString()
    }
    Write-Host $line
}

 Das schaut dann wie folgt aus:

Leave Comments