Windows Server 2016の新しいPowerShell機能

おはようございます%HabraUser%! 少し前まで、私は幸運にも、Windows Server 2016がプレインストールされたVDSの所有者になり、このオペレーティングシステムとその新機能に慣れることができました。 過去数年間、私はPowerShellを使用した管理のファンでしたが、私が日常業務で日常業務を自動化するために使用するため、最初に興味を持ったのは彼でした。 企業環境では、オペレーティングシステムの最も一般的に使用されるバージョンは、それぞれWindows 8.1とWindows Server 2012 R2であり、Windows 10が自宅のコンピューターにもたらした変更に注意を払うことはありませんでした。 以前のバージョンよりもはるかに良く、便利で高速になった更新されたツールを見逃しました。これらの大きな変更についてお話ししたいと思います。 猫へようこそ。



リストの一番上には、管理者がこの製品をより快適に使用できるように設計された最も小さな変更があります。





最後の点については別にお話ししたいと思います。 組織内のActive Directoryのサイズは異なります。ユーザー数が20〜60人の場合もあり、数万人以上の場合もありました。最初の場合はグラフィカルインターフェイスでしかできなかった場合、2番目の場合はそれを行うことができますが、それは非常に困難です。 Active Directoryがデータリッチなデータベースであり、作業に必要なデータを数分で取得し、これに適切なアプローチを適用できると考える管理者はほとんどいません。



いくつかの広告
Windows Server 2016の画像は、Microsoftパートナーディレクトリにダウンロードするために昨日表示されただけで、今日はvpsvilleで250ルーブルのみのすべての機能に精通することができます。


叙情的な余談...
Microsoftは当初、Active Directoryをシステム管理者だけでなく人員向けのツールとして提供しました。 前者には、サーバーとソフトウェアアーキテクチャの観点から、すべてが正常に機能する必要があります。後者は、ディレクトリを正しく埋める役割を果たします。 したがって、この問題に関する情報を収集できるすべてのソースから理解するのが慣習であるように、管理者はユーザーアカウントを作成し、Active Directoryのイデオロギーに従ってグループを作成するべきではありませんが、厳しいロシアの現実では、すべてが少し異なります。


技術仕様の代わりに。
私たちが最も小さな組織で働いていないことを想像してみてください。たとえば、私たちの広大な故郷に散在するブランチにある複数のドメインコントローラーを制御できます。たとえば、従業員数は少なくとも1,000人です。 私たちの国は多くのタイムゾーンに分割されていることを思い出してください。一部の従業員は仕事に就くと、すでに就寝しているため、Active Directory管理モデルは部分的に集中化されます。これは、セントラルオフィスだけでなく、地域の管理者の存在を意味します。 また、Active Directoryを保守するための要件を備えた内部の技術文書も用意されており、すべてが統一されて便利になっていますが、これはクールなデータベースであり、失敗ではないことを覚えています。


それで、解決する必要がある知識とタスクがあります。それをやってみましょう。



私たちの参照条件によれば、私たちが持っているデータは非常によく構造化されているという事実のため、標準的なクエリを使用してそれらに連絡できます。そのような例の1つは各企業で使用される従業員のディレクトリです。



PowerShellでの表示は次のとおりです。



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
      
      





コードコメント
Get-ADUser --Propertiesパラメーターの後にカンマで指定されたプロパティを持つ検索領域(-SearchBase)からユーザーの配列を取得するコマンドレット。

Export-CSV-この配列をファイルにエクスポートします。


その結果、名前、キャビネット番号、電話番号、メールアドレス、役職、部門名、支店名、名前が必要なフィールドを備えた既製のテーブルを取得します。 この従業員の頭。 このスクリプトは数秒間機能し、検索領域(-SearchBase)でパラメーターを2つ(ファイル名) 1つだけ変更し、現在のブランチのディレクトリを取得できます。 次に、Excelで作成したファイルを開き、列名を変更し、必要に応じてフォーマットし、Excelのネイティブ形式で保存します。 これが甘やかされており、自分でもっと深刻なことができることに気付いたので、COMオブジェクト、つまりExcelを操作するオプションが登場しました。



 $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
      
      





コードコメント
Get- Process-プロセスのリストを取得します。この例では[e] xcel;

New-Object-新しいCOMオブジェクトを作成し、Excelプロセスを開始します。

Stop-Process-作成されたオブジェクトを削除します。



PowerShellのコードはもう少し多くなりましたが、出力では、何も修正する必要のない既製のファイルが得られました。 大きなことは1つしかありませんでしたが、Windows 8.1のこのコードは、処理中のオブジェクトの数と、ほとんどの場合COMオブジェクトを処理するのにかかる時間に応じて、25〜40分実行されます。 したがって、私の人生でPowerShell 5が登場する前に使用するこのアプローチは、ファイルの作成に時間がかかったため不便でした。 Windows 10またはWindows Server 2016では、このスクリプトは数分で実行されるため、機能の範囲を拡大できます。



*
*-コードへのコメントでは、コマンドレットの名前は公式ドキュメントへのリンクです。



最後まで読んでくれてありがとう。 チュクチは作家ではなく、チュクチは読者です。



All Articles