Hi guys,
I'm facing the following problem. Below you see my script to create a shared folder. (My folder share is visible in failover cluster manager, underneath clustergroup TESTSTO01.)
Now I need to enable Access Based Enumeration on this share. Has anyone a clue how to do that in powershell? (Version 2).
I also need to make sure that the files and programs are not available offline.
Thanks in advance!
$SHARE_READ = 1179817 # 100100000000010101001
$SHARE_CHANGE = 1245631 # 100110000000100010110
$SHARE_FULL = 2032127 # 111110000000111111111
$SHARE_NONE = 1 # 000000000000000000001
$ACETYPE_ACCESS_ALLOWED = 0
$ACETYPE_ACCESS_DENIED = 1
$ACETYPE_SYSTEM_AUDIT = 2
$ACEFLAG_INHERIT_ACE = 2
$ACEFLAG_NO_PROPAGATE_INHERIT_ACE = 4
$ACEFLAG_INHERIT_ONLY_ACE = 8
$ACEFLAG_INHERITED_ACE = 16
$ACEFLAG_VALID_INHERIT_FLAGS = 31
$ACEFLAG_SUCCESSFUL_ACCESS = 64
$ACEFLAG_FAILED_ACCESS = 128
# New Trustee
function New-Trustee($Domain, $User)
{
$Trustee = ([WMIClass]"\\TESTSTO01\root\cimv2:Win32_Trustee").CreateInstance()
$Trustee.Domain = $Domain
$Trustee.Name = $User
if ($User -eq "Administrators")
{$Trustee.SID = @(1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0,32,2,0,0)}
else
{$Trustee.SID = @(1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)}
return $Trustee
}
# New ACE
function New-ACE($Domain, $User, $Access, $Type, $Flags)
{
$ACE = ([WMIClass]"\\TESTSTO01\root\cimv2:Win32_ACE").CreateInstance()
$ACE.AccessMask = $Access
$ACE.AceFlags = $Flags
$ACE.AceType = $Type
$ACE.Trustee = New-Trustee $Domain $User
return $ACE
}
# Get SD
function Get-SD
{
$sd = ([WMIClass]"\\TESTSTO01\root\cimv2:Win32_SecurityDescriptor").CreateInstance()
$ACE1 = New-ACE -Domain $null -User "Everyone" -Access $SHARE_CHANGE -Type $ACETYPE_ACCESS_ALLOWED -Flags $ACEFLAG_INHERIT_ACE
$ACE2 = New-ACE -Domain $null -User "Administrators" -Access $SHARE_FULL -Type $ACETYPE_ACCESS_ALLOWED -Flags $ACEFLAG_INHERIT_ACE
[System.Management.ManagementObject[]] $DACL = $ACE1, $ACE2
$sd.DACL =$DACL
return $sd
}
# Create-Share
function Create-Share($ShareName, $Path, $Comment,$Access)
{
$checkShare = (Get-WmiObject Win32_Share -Filter "Name='$ShareName'")
if ($checkShare -ne $null) {
# "Share exists and will now be deteted!!!"
get-WmiObject Win32_Share -Filter "Name='$ShareName'" | foreach-object { $_.Delete() }
}
$wmishare = [WMIClass] "\\TESTSTO01\ROOT\CIMV2:Win32_Share"
$Access = Get-SD
$R = $wmishare.Create($Path,$Sharename,0,$null,$Comment,"", $Access)
if ($R.ReturnValue -ne 0) {
Write-Error "Error while creating share: " + $R.ReturnValue
exit
}
# Write-Host "Share has been created."
}
# Create first share with permissons **********************************
$ShareName = "$Company$"
$Path = "$Driveletter" + ":\$Company"
$Comment = ""
$Domain = $Null
Create-Share $ShareName $Path $Comment $Access