Archiv » Mai, 2016 «

29 | 05 | 2016

PowerShell Hack: Statischen Domain Controller in Lync setzen

Geschrieben von um 23:15 Uhr

Keine Ahnung, wo die Anforderung wirklich her kommt, aber scheinbar gibt es die: In Lync (Skype for Business) einen oder mehrere fixe(n) DC für Benutzer-Synchronisierung konfigurieren. Da denkt man, kein Problem – das Cmdlet Set-CsUserReplicatorConfiguration hat ja einen Parameter DomainControllerList (siehe https://technet.microsoft.com/de-de/library/gg398540.aspx). Und denkt man dann, man würde hergehen und mit so etwas Erfolg haben:

Set-CsUserReplicatorConfiguration-Identity global -DomainControllerList @{Add='dc-one.my.domain.name'}

Doch weit gefehlt. Es kommt eine Typenkonvertierungs-Fehlermeldung:

Set-CsUserReplicatorConfiguration : Unable to cast object of type 'System.String' to type 'Microsoft.Rtc.Management.WritableConfig.Settings.UserReplicator.DomainControllerType'.
At line:1 char:1
+ Set-CsUserReplicatorConfiguration -Identity global -DomainControllerList @{Add=" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [Set-CsUserReplicatorConfiguration], InvalidCastException
+ FullyQualifiedErrorId : System.InvalidCastException,Microsoft.Rtc.Management.Xds.SetUserReplicatorConfigurationCmdlet 

Nach einigem Grübeln gibt es die folgende Lösung für das Phänomen:

[Microsoft.Rtc.Management.WritableConfig.Settings.UserReplicator.DomainControllerType]$newdc = 'DC=my,DC=domain,DC=name'
$newdc.DomainControllerFQDN.Add('dc-one.my.domain.name')
$newdc.DomainControllerFQDN.Add('dc-two.my.domain.name')

Set-CsUserReplicatorConfiguration -Identity global -DomainControllerList @{Add=$newdc}

Nicht umsonst sagt Microsoft im oben verlinkten TechNet-Artikel:

Normalerweise kann der Benutzerreplikationsdienst Domänencontroller über die Windows-API „DsGetDcName“ identifizieren. Deshalb sollten Sie sich von Microsoft-Supportmitarbeitern beraten lassen, bevor Sie Domänencontroller manuell über diesen Parameter auswählen.

 

 

Tags » , , , «

+

28 | 05 | 2016

PowerShell Hack: UTF-8 ohne BOM ausgeben

Geschrieben von um 11:51 Uhr

Wenn man mit

'irgendein Text' | Out-File $outfile -Encoding UTF8

Text in eine Textdatei ausgibt, entsteht am Ende eine „UTF mit BOM“-Kodierung. Unix- und Linux-Programme, denen man die Datei dann verfüttern möchte, finden das oft nicht gut.

Abhilfe schafft der folgende Befehl:

$cnt = Get-Content $outfile #outfile = Pfad der Datei
[System.IO.File]::WriteAllLines($outfile, $cnt)

Natürlich darf der Hinweis nicht fehlen, dass die .NET-Methode um einiges schneller ist als Out-File. Der folgende Code zeigt es sehr eindrucksvoll:

'PowerShell-Methode:'
(Measure-Command {
    for ($i=1;$i-lt 10000;$i++) {
       "Auf dieser Zeile der Textdatei steht die Zahl $i" | Out-File c:\temp\test_out_ps.txt -Encoding utf8 -Append
    }
}).TotalSeconds

'.NET-Methode:'
(Measure-Command {
    for ($i=1;$i-lt 10000;$i++) {
        [System.IO.File]::AppendAllText('c:\temp\test_out_net.txt',"Auf dieser Zeile der Textdatei steht die Zahl $i`n",[System.Text.Encoding]::UTF8) 
    }
}).TotalSeconds

Auf meinem Rechner: PowerShell = 5,4 Sekunden, .NET = 1,6 Sekunden.

Tags » , , «

+

25 | 05 | 2016

PowerShell Hack: Namen von Standardordnern in einem Exchange-Postfach

Geschrieben von um 17:39 Uhr

Manchmal muss man den lokalisierten Namen eines Standardordners (Inbox/Posteingang, Calendar/Kalender) usw. wissen, z.B. um mit *-MailboxFolderPermission dort Berechtigungen zu lesen oder zu setzen. Schnell und einfach kann man den Namen des Ordners feststellen mit

$calendar_folder = "$($mailbox):\$((Get-MailboxFolderStatistics $mailbox | where {$_.FolderType -eq 'Calendar'} | Select-Object -First 1).Name)"

$contacts_folder = "$($mailbox):\$((Get-MailboxFolderStatistics $mailbox | where {$_.FolderType -eq 'Contacts'} | Select-Object -First 1).Name)"

$inbox_folder = "$($mailbox):\$((Get-MailboxFolderStatistics $mailbox | where {$_.FolderType -eq 'Inbox'} | Select-Object -First 1).Name)"

Das funktioniert auch für ‚Sent Items‘ und ‚Deleted Items‘.

Tags » , , «

+