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 Exchange Server-Administration mit der Windows PowerShell / Microsoft Exchange Management Shell
 HyperV und/oder VMWare verwalten mit der Windows PowerShell
 Testing mit Windows PowerShell
 Netzwerkverwaltung mit der Windows PowerShell
 Verwaltung von Benutzern und Gruppen des „Active Directory“ 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
 Windows PowerShell 5.0/5.1 für Umsteiger von Version 4.0
 Windows PowerShell 5.1/PowerShell 7.0 für System- und Netzwerkadministratoren
 Microsoft SQL Server-Administration mit der Windows PowerShell
 Grundlagen der PowerShell-Konsole
 Arbeiten mit PowerShell-Laufwerken
 Windows PowerShell 5.1/PowerShell 7.0 für System- und Netzwerkadministratoren (4-Tages-Agenda des öffentlichen Seminars)
 Microsoft Azure-Cloud-Dienste verwalten mit der Windows PowerShell
 Remoting, Jobs und Workflows mit der Windows PowerShell
 NetApp verwalten mit der PowerShell
 Windows PowerShell 4.0 für Umsteiger von Version 3.0
 Formatierung und Reporting mit der 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)
 Microsoft Teams
 Microsoft SharePoint im Überblick
 Anfrage für eine individuelle Schulung zum Thema PowerShell Sonstige Sprache  Gesamter Schulungsthemenkatalog