Code-Beispiel

Dateisystemfreigabe anlegen anhand einer XML-Eingabedatei (mit Berechtigungen)

Ein Beispiel zum Einsatz der Klasse System.System.Management.ManagentObject aus der .NET-Klassenbibliothek.

Autor: Dr. Holger Schwichtenberg

Beschreibung

Häufig möchte man zahlreiche Freigaben "in einem Rutsch" anlegen. Das PowerShell-Skript dient dazu, eine XML-Datei auszulesen und die Freigaben anzulegen. Dabei wird zunächst die XML-Datei mit Get-Content eingelesen. Der Dateiinhalt wird dann in den eingebauten PowerShell-Datentyp [XML] konvertiert, wodurch eine Instanz der .NET-Klasse System.Xml.XmlDocument ensteht. Mit der Methode SelectNodes() erfolgt dann der Zugriff auf die in dem Dokument enthaltenen <Share>-Knoten. Die PowerShell kapselt durch den eingebauten XML-Adapter die einzelnen Knoten so, dass die Unterknoten als Attribute der PowerShell-Varianlen (hier: $Share) erscheinen. Mit diesen Daten wird dann die Methode Create() der WMI-Klasse Win32_Share gefüttert, wobei diese Aufgaben inklusive des vorherigen Löschens einer eventuell vorhandenen gleichnamigen Freigabe hier in einer Unterroutine (New-Share) gekapselt sind.

Programmcodebeispiele PowerShell-Pipeline

##########################################

Create a bunch of shares with permissions

(C) Dr. Holger Schwichtenberg, www.IT-Visions.de

##########################################

Parameters

$Computer = "."

Subs

Constants

$SHARE_READ = 1179817
$SHARE_CHANGE = 1245462
$SHARE_FULL = 2032127
$SHARE_NONE = 1

$ACETYPEACCESSALLOWED = 0
$ACETYPEACCESSDENIED = 1
$ACETYPESYSTEMAUDIT = 2

$ACEFLAGINHERITACE = 2
$ACEFLAGNO_PROPAGATE_INHERITACE = 4
$ACEFLAGINHERIT_ONLYACE = 8
$ACEFLAGINHERITEDACE = 16
$ACEFLAGVALID_INHERITFLAGS = 31
$ACEFLAGSUCCESSFULACCESS = 64
$ACEFLAGFAILEDACCESS = 128

Get Trustee

function New-Trustee($Domain, $User)
{
$Account = new-object system.security.principal.ntaccount("itv\hs")
$SID = $Account.Translate([system.security.principal.securityidentifier])
$useraccount = [ADSI] ("WinNT://" + $Domain + "/" + $User)
$mc = [WMIClass] "Win32_Trustee"
$t = $MC.CreateInstance()
$t.Domain = $Domain
$t.Name = $User
$t.SID = $useraccount.Get("ObjectSID")
return $t
}

Create ACE

function New-ACE($Domain, $User, $Access, $Type, $Flags)
{
$mc = [WMIClass] "Win32_Ace"
$a = $MC.CreateInstance()
$a.AccessMask = $Access
$a.AceFlags = $Flags
$a.AceType = $Type
$a.Trustee = New-Trustee $Domain $User
return $a
}

Create SD

function Get-SD
{

$mc = [WMIClass] "Win32_SecurityDescriptor"
$sd = $MC.CreateInstance()
$ACE1 = New-ACE "ITV" "Geschäftsführung" $SHAREREAD $ACETYPE_ACCESS_ALLOWED $ACEFLAG_INHERITACE
$ACE2 = New-ACE "ITV" "Vertrieb" $SHAREFULL $ACETYPE_ACCESS_ALLOWED $ACEFLAG_INHERITACE
$ACE3 = New-ACE "ITV" "Produktmanagement" $SHAREFULL $ACETYPE_ACCESS_ALLOWED $ACEFLAG_INHERITACE
[System.Management.ManagementObject[]] $DACL = $ACE1 , $ACE2, $ACE3

$sd.DACL = $DACL
return $sd
}

Function New-Share($Computer,$ShareName, $Path, $Comment, $Access)
{

Info

"Creating Share $ShareName for $Path..."

Delete if exists

get-WmiObject Win32_Share -ComputerName $Computer -Filter "Name='$ShareName'" | foreach {
Write-Warning "Deleting existing share $($_.Name)..."
$_.Delete()
}

Win32_Share anlegen

$MC = [WMIClass] "ROOT\CIMV2:Win32_Share"
$Access = Get-SD
$R = $mc.Create($pfad, $Sharename, 0, 10, $Comment, "", $Access)

Result

if ( $R.ReturnValue -ne 0) { Write-Error ("Error creating share: " + $R.ReturnValue); Exit}
"Share was created!"

}

Get XML file

$doc = [xml] (Get-Content -Path h:\demo\powershell\dateisystem\shares.xml)
$shares = $doc.SelectNodes("//Share")

Loop

foreach ($share in $shares)
{
New-Share $Computer $share.Name $share.Path $share.description
}

Programmcodebeispiele Sonstige Sprache

<?xml version="1.0" encoding="utf-8"?>
<Shares>
<Share>
<Path>c:\Daten\Kunden</Path>
<Name>Kunden</Name>
<Description>Kundendokumente</Description>
</Share>

<Share>
<Path>c:\Daten\Projekte</Path>
<Name>Projekte</Name>
<Description>Projektdateien</Description>
</Share>

<Share>
<Path>c:\Daten\Lieferanten</Path>
<Name>Lieferanten</Name>
<Description>Lieferanteninformationen</Description>
</Share>

<Share>
<Path>i:\</Path>
<Name>Software</Name>
<Description>Setup-Dateien</Description>
</Share>
</Shares>

 

Querverweise

 Liste aller Codebeispiele  Definition '.NET Framework Class Library'  Verfügbarkeit der Klasse 'System.System.Management.ManagentObject'  Übersicht über den FCL-Namensraum 'System'  PowerShell Community Portal

Buchtipp

Buchcover PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch (5. Auflage Oktober 2022 (9. Auflage Gesamtreihe)) PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch
Autor(en): Dr. Holger Schwichtenberg
Erschienen 2022
Umfang: 1426 Seiten
ISBN: 3446472967

Beratung & Support

Schulungen zu diesem Thema

 Microsoft SharePoint-Administration mit der Windows PowerShell
 Microsoft Azure-Cloud-Dienste verwalten mit der Windows PowerShell
 Microsoft Exchange Server-Administration mit der Windows PowerShell / Microsoft Exchange Management Shell
 Formatierung und Reporting mit der PowerShell
 Netzwerkverwaltung mit der Windows PowerShell
 Verwaltung von Benutzern und Gruppen des „Active Directory“ mit der PowerShell
 PowerShell-Sicherheit (Sicher skripten mit der PowerShell)
 Windows Server-Administration mit der Windows PowerShell, insbesondere Active Directory-Administration
 PowerShell-Scripting: Skripte schreiben mit der Windows PowerShell
 Citrix verwalten mit der PowerShell
 Windows PowerShell 5.1/PowerShell 7.0 für Softwareentwickler
 System Center verwalten mit der Windows PowerShell
 .NET und COM nutzen in der Windows PowerShell
 Testing mit Windows PowerShell
 Windows PowerShell 5.1/PowerShell 7.0 für System- und Netzwerkadministratoren
 Microsoft SQL Server-Administration mit der Windows PowerShell
 Grundlagen der PowerShell-Konsole
 Microsoft Curriculum (MOC) Kurs Nr. 10961: Windows PowerShell für Administratoren / Automating Administration with Windows PowerShell
 Arbeiten mit PowerShell-Laufwerken
 Windows PowerShell 5.1/PowerShell 7.0 für System- und Netzwerkadministratoren (4-Tages-Agenda des öffentlichen Seminars)
 Windows PowerShell 5.0/5.1 für Umsteiger von Version 4.0
 Remoting, Jobs und Workflows mit der Windows PowerShell
 NetApp verwalten mit der PowerShell
 Windows PowerShell 4.0 für Umsteiger von Version 3.0
 HyperV und/oder VMWare verwalten mit der Windows PowerShell
 Active Directory-Administration mit der Windows PowerShell
 Scripting-Grundlagenwissen
 Microsoft SQL Server 2008 - Die Neuerungen gegenüber SQL Server 2005 (Update-Schulung)
 Active Directory für Administratoren
 .NET-Überblick für .NET-Einsteiger und .NET-Entscheider (wahlweise für das klassische .NET Framework und/oder das moderne .NET)
 Anfrage für eine individuelle Schulung zum Thema PowerShell Sonstige Sprache  Gesamter Schulungsthemenkatalog