Killah_Priest schreef op dinsdag 04 augustus 2015 @ 19:47:
[...]
Om je code iets in te korten (uitgaande van PS3 of hoger) :
- De System assembly hoef je niet in te laden, dat doet PS automatisch
- System.Data wordt als het goed is ook automatisch geladen
Het deel in je code mbt het zoeken naar een alternatief voor Set-ADUser : bekijk eens System.DirectoryServices.AccountManagement.
Om bv properties van het current AD account te zien (handig in user scripts) doe je het volgende :
code:
1
2
| add-type -AssemblyName System.DirectoryServices.AccountManagement
[System.DirectoryServices.AccountManagement.UserPrincipal]::Current |
Je krijgt hier btw ook mooie objecten voor terug ipv met de DirectorySearcher van System.DirectoryServices.
Wat je alternatieve code betreft: de vraag is hoe dit gemakkelijk werkt. Ik ben in domein Y van forest X en mijn scipt werk in domeinen [A...O] van forest Z. Authenticatie is dus een belangrijk issue en zowel DirectorySearcher als AD cmdlets kunnen daar goed mee om. Met de output van DirectorySearcher ben ik trouwens tevreden. Eerst heb ik het geprobeerd met
dsget en dat was een ramp inzake text scraping. Maar ik zal er eens naar kijken, alleen al omdat ik een alternatief nodig heb om weg te schrijven.
Ik heb net nog een fout ontdekt:
Die System.Assembly is een restant van de IDE (Powershell Studio) die ik gebruik om de GUI te bouwen.
Die volgorde klopt niet denk ik

Drie functies met nog werk aan:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| Function Convert-DNtoEMail ([string]$DN)
{
[string]$EMail = $DN
Return $EMail;
}
Function Get-DN ($FQDN)
{
$FQDNArray = $FQDN.Split(".")
$Separator = ","
For ($x = 0; $x -LT $FQDNArray.Length ; $x++)
{
If ($x -EQ ($FQDNArray.Length - 1)) { $Separator = "" }
[string]$DN += "DC=" + $FQDNArray[$x] + $Separator
}
Return $DN
}
Function Get-FQDN ($x)
{
#OK, this is quick and dirty
$y = $x -Split "DC="
$a = $y | Select-Object -Skip 1 | % {$_.Replace(",",".")}
$b = $a + $y[0] -Replace "CN=","/" -Replace "OU=","/" -Replace ",","" #to do: escaped commas \, -> regex
$b = -join $b
$b
} |
Verder over PS5 (want ik lees hier nog weinig over in dit topic) : ik ben erg blij met de new() method in de .NET classes, scheelt weer het gebruik van new-object (voor mij blijft de code zo overzichtelijk EN erg makkelijk om iets te porten naar C# op die manier).
New-Object is de PoSh-methode en
.New() de .NET-methode. Vergeljkbaar met -Split en .Split(). Zelf gebruik ik ze ook door elkaar, maar een purist kan beargumenteren dat de eerste methode de enige echte goeie is voor PoSh en de tweede eigenlijk geen PoSh meer is maar C#. Maar ach, een kniesoor die daar om maalt.
De kleuren in de automatische syntax highlighting vind ik daarentegen weer een beetje ongelukkig gekozen ten opzichte van ISE (bv groen voor een variable terwijl dit in ISE standaard rood is, strings hebben een bepaalde kleur groen welke lastig te lezen is op de standaard achtergrond, laat staan als je je PS window transparant hebt gemaakt in Win10)
De ISE van Windows heb ik trouwens nog nooit gebruikt. Die valt wat licht uit in vergelijking met commerciele producten.
[
Voor 12% gewijzigd door
YellowOnline op 04-08-2015 21:38
]