Neue PowerShell-Funktionen in Windows Server 2016

Guten Tag% HabraUser%! Vor nicht allzu langer Zeit hatte ich das Glück, Eigentümer von VDS mit vorinstalliertem Windows Server 2016 zu werden, um mich mit diesem Betriebssystem und seinen neuen Funktionen vertraut zu machen. Aufgrund der Tatsache, dass ich in den letzten Jahren ein Fan von PowerShell-Administration war, interessierte mich dieser zunächst, da ich es in meiner täglichen Arbeit zur Automatisierung von Routineaufgaben verwende. In der Unternehmensumgebung war Windows 8.1 bzw. Windows Server 2012 R2 die bei weitem am häufigsten verwendete Version der Betriebssysteme. Ich habe die Änderungen, die Windows 10 auf meinem Heimcomputer mit sich brachte, nicht beachtet und es stellte sich heraus, dass sie vergeblich waren. Ich habe das aktualisierte Tool vermisst, das viel besser, bequemer und schneller als frühere Versionen geworden ist. Ich möchte über diese wesentlichen Änderungen sprechen. Willkommen bei Katze.

Ganz oben auf der Liste stehen die geringfügigsten Änderungen, die den täglichen Gebrauch dieses Produkts für den Administrator komfortabler machen sollen:

  • Das PowerShell-Editorfenster kann jetzt in der Größe geändert werden, was eine zweifelhafte Leistung ist. Jetzt kann das Fenster auf den Vollbildmodus erweitert werden.

    Vergleichen wir:


    PowerShell 2.0


    PowerShell 5.1

  • Der nächste offensichtliche Unterschied, der in den Screenshots sichtbar ist, ist die Hervorhebung der Syntax - dies ist bereits ein sehr großes Plus;

  • Es folgt eine weitere Neuerung: Von nun an sollten Module und Cmdlets unterschiedlicher Versionen unterstützt werden.

    Dieses Beispiel ist am besten in den Screenshots zu sehen:


    PowerShell 2.0.


    PowerShell 5.1.

    Wie Sie auf dem Screenshot sehen können, ist ein neuer Befehl erschienen, der wie die bekanntere Update-Hilfe zum Aktualisieren der Hilfe zum Aktualisieren von Versionen von Update-Module-Modulen dient.

  • Klassen sind erschienen , es gibt einen separaten Artikel zu diesem Thema ;

  • Die Geschwindigkeit beim Arbeiten mit COM-Objekten wurde erhöht.

Auf den letzten Punkt möchte ich gesondert eingehen. Die Größe von Active Directory in Organisationen ist unterschiedlich, es gab Fälle mit 20 bis 60 Benutzern und auch Fälle mit mehr als mehreren Zehntausend Benutzern. Wenn Sie im ersten Fall nur eine grafische Benutzeroberfläche verwenden können, ist dies im zweiten Fall möglich, aber recht schwierig. Nur wenige Administratoren stellen sich Active Directory als datenreiche Datenbank vor, aus der Sie in wenigen Minuten die Daten abrufen können, die Sie für die Arbeit benötigen.

Etwas Werbung
Das Image von Windows Server 2016 wurde erst gestern im Microsoft-Partnerverzeichnis zum Download bereitgestellt. Heute können Sie alle Funktionen für nur 250 Rubel auf vpsville kennenlernen.

Lyrischer Exkurs ...
Microsoft изначально преподносила Active Directory как инструмент не только для системных администраторов, но и для сотрудников отдела кадров. Первые должны содержать все в рабочем состоянии с точки зрения серверной и программной архитектуры, вторые в свою очередь отвечать за корректное заполнение каталога. Поэтому как принято понимать из всех источников, из которых можно почерпнуть информацию по этому вопросу, администратор не должен заводить учетные записи пользователей, да и группы создавать по идеологии Active Directory тоже, но в наших суровых Российских реалиях все немного совсем не так.

Вместо технического задания.
Stellen wir uns vor, wir arbeiten nicht in der kleinsten Organisation und haben die Kontrolle über mehrere Domänencontroller in Zweigstellen, die in unserem riesigen Heimatland verstreut sind. Beispielsweise wird die Anzahl unserer Mitarbeiter mindestens eintausend betragen. Erinnern Sie sich daran, dass unser Land in viele Zeitzonen unterteilt ist und einige, die gerade zur Arbeit kommen, andere bereits schlafen gehen, sodass das Active Directory-Verwaltungsmodell teilweise zentralisiert wird, was die Anwesenheit von Administratoren in den Regionen und nicht nur in der Zentrale impliziert. Wir haben auch eine interne technische Dokumentation mit den Anforderungen für die Wartung von Active Directory, damit alles einheitlich und bequem ist, aber wir erinnern uns, dass dies eine coole Datenbank ist, kein Fehler.

Und damit wir das Wissen und die Aufgabe haben, die gelöst werden müssen, machen wir genau das.

Aufgrund der Tatsache, dass die von uns zur Verfügung gestellten Daten gemäß unseren Bestimmungen sehr gut strukturiert sind, können wir sie über Standardabfragen kontaktieren. Ein Beispiel hierfür ist das Verzeichnis der Mitarbeiter, die in jedem Unternehmen verwendet werden.

So sieht es in PowerShell aus:

Get-ADUser -Filter * -SearchBase "OU=Users,OU=Main Office,DC=MyCompany,DC=ru" -Server 'Domain Controller Name' -Properties displayName, description, physicalDeliveryOfficeName, telephoneNumber, mail, title, department, company, manager |
Select displayName, description, physicalDeliveryOfficeName, telephoneNumber, mail, title, department, company, manager |
Export-CSV "C:\Export\MainOffice.csv" -NoType -UseCulture -Encoding Unicode

Code-Kommentare
Get-ADUser - Ein Cmdlet, das ein Array von Benutzern aus dem Suchbereich (-SearchBase) mit Eigenschaften abruft, die durch ein Komma nach dem Parameter -Properties angegeben werden.
Export-CSV - Exportiert dieses Array in eine Datei.

Als Ergebnis erhalten wir eine vorgefertigte Tabelle mit den erforderlichen Feldern: Name, Büronummer, Telefonnummer, E-Mail-Adresse, Position, Abteilungsname, Filialname, Name Der Kopf dieses Angestellten. Dieses Skript arbeitet für einige Sekunden und ermöglicht es uns, nur zwei (Dateiname) einen Parameter im Suchbereich (-SearchBase) zu ändern und ein Verzeichnis für jeden Zweig zur aktuellen Zeit abzurufen. Als Nächstes öffnen wir die von uns erstellte Datei in Excel, ändern die Spaltennamen, formatieren sie nach Belieben und speichern sie im nativen Format für Excel. Nachdem Ihnen klar wurde, dass dies verwöhnt und Sie etwas Ernsthafteres selbst tun können, wurde die Option angeboten, mit einem COM-Objekt, nämlich Excel, zu arbeiten.

$Template_Excel = "C:\PS\Шаблон.xlsx"
$SaveAs = "C:\PS\ЗаполненыйШаблон.xlsx"
$AllExcel = @(Get-Process [e]xcel | %{$_.Id})
$MyExcel = New-Object -ComObject Excel.Application
$ExcelId = Get-Process excel | %{$_.Id} | Where {$AllExcel -notcontains $_} 
$MyExcel.Visible = $False
$WorkBook = $MyExcel.workbooks.open($Template_Excel)
$WorkSheet = $WorkBook.sheets.item("Шаблон")
$Users = Get-ADUser -Filter * -SearchBase "OU=Users,OU=Main Office,DC=MyCompany,DC=ru" -Server 'Domain Controller Name' -Properties displayName, 
description, physicalDeliveryOfficeName, telephoneNumber, mail, title, department, company, manager |
Select sAMAccountName, displayName, description, physicalDeliveryOfficeName, telephoneNumber, mail, title, department, company, manager
For($x = 0; $x -le $Users.count; $x++)
{
    $WorkSheet.Rows.Item($x+2).Columns.Item(1) = $Users[$x].displayName
    $WorkSheet.Rows.Item($x+2).Columns.Item(2) = $Users[$x].description
    $WorkSheet.Rows.Item($x+2).Columns.Item(3) = $Users[$x].physicalDeliveryOfficeName
    $WorkSheet.Rows.Item($x+2).Columns.Item(4) = $Users[$x].telephoneNumber
    $WorkSheet.Rows.Item($x+2).Columns.Item(5) = $Users[$x].mail
    $WorkSheet.Rows.Item($x+2).Columns.Item(6) = $Users[$x].title
    $WorkSheet.Rows.Item($x+2).Columns.Item(7) = $Users[$x].department
    $WorkSheet.Rows.Item($x+2).Columns.Item(8) = $Users[$x].company
    $WorkSheet.Rows.Item($x+2).Columns.Item(9)= $Users[$x].manager
}
$Workbook.SaveAs($SaveAs)
$MyExcel.quit()
Stop-Process -Id $ExcelId -Force -ErrorAction SilentlyContinue

Code-Kommentare
Get-Process - Ruft eine Liste von Prozessen ab, in unserem Fall [e] xcel;
New-Object - Erstellen Sie ein neues COM-Objekt und starten Sie Ihren Excel-Prozess.
Stop-Process - Löscht das erstellte Objekt.

Der Code in PowerShell ist ein bisschen mehr geworden, aber am Ausgang haben wir eine fertige Datei, in der nichts repariert werden muss. Es gab nur eine große Sache, ABER dieser Code in Windows 8.1 läuft ~ 25-40 Minuten, abhängig von der Anzahl der verarbeiteten Objekte und der Zeit, die die meiste Zeit benötigt, um mit einem COM-Objekt zu arbeiten. Dementsprechend war dieser Ansatz vor dem Aufkommen von PowerShell 5 in meinem Leben unpraktisch, da die Erstellung der Datei viel Zeit in Anspruch nahm. In Windows 10 oder Windows Server 2016 wird dieses Skript in wenigen Minuten ausgeführt, sodass Sie den Funktionsumfang erweitern können.

*
* - In den Kommentaren zum Code sind die Namen der Cmdlets Links zur offiziellen Dokumentation.

Vielen Dank für das Lesen bis zum Ende. Chukchi ist kein Schriftsteller, Chukchi ist ein Leser.

Jetzt auch beliebt: