| Handy functions for getting share info, get and create scheduled tasks. |
From Evernote: |
Get-MySharePermissions, Get-MyShares, Get-ScheduledTask, Create-ScheduledTas |
function Get-MySharePermissions
{
param([string]$computername,[string]$sharename)
$ShareSec = Get-WmiObject -Class Win32_LogicalShareSecuritySetting -ComputerName $computername
ForEach ($ShareS in ($ShareSec | Where {$_.Name -eq $sharename}))
{
$SecurityDescriptor = $ShareS.GetSecurityDescriptor()
$myCol = @()
ForEach ($DACL in $SecurityDescriptor.Descriptor.DACL)
{
$myObj = "" | Select Domain, ID, AccessMask, AceType
$myObj.Domain = $DACL.Trustee.Domain
$myObj.ID = $DACL.Trustee.Name
Switch ($DACL.AccessMask)
{
2032127 {$AccessMask = "FullControl"}
1179785 {$AccessMask = "Read"}
1180063 {$AccessMask = "Read, Write"}
1179817 {$AccessMask = "ReadAndExecute"}
-1610612736 {$AccessMask = "ReadAndExecuteExtended"}
1245631 {$AccessMask = "ReadAndExecute, Modify, Write"}
1180095 {$AccessMask = "ReadAndExecute, Write"}
268435456 {$AccessMask = "FullControl (Sub Only)"}
default {$AccessMask = $DACL.AccessMask}
}
$myObj.AccessMask = $AccessMask
Switch ($DACL.AceType)
{
0 {$AceType = "Allow"}
1 {$AceType = "Deny"}
2 {$AceType = "Audit"}
}
$myObj.AceType = $AceType
Clear-Variable AccessMask -ErrorAction SilentlyContinue
Clear-Variable AceType -ErrorAction SilentlyContinue
$myCol += $myObj
}
}
Return $myCol
}
#Get-MyShares servername
function Get-MyShares
{
param([string]$Server)
$Shares = Get-WmiObject -Class Win32_Share -ComputerName $Server
$output = @()
ForEach ($Share in $Shares)
{
$fullpath = "\\{0}\{1}" -f $server, $share.name
Add-Member -MemberType NoteProperty -InputObject $Share -Name FullPath -Value $fullpath
$output += $Share
}
Return $output
}
# EXAMPLE: Get-ScheduledTask -ComputerName Server01
Function Get-ScheduledTask
{
param([string]$ComputerName = "localhost")
Write-Host "Computer: $ComputerName"
$Command = "schtasks.exe /query /s $ComputerName"
Invoke-Expression $Command
Clear-Variable Command -ErrorAction SilentlyContinue
Write-Host "`n"
}
# EXAMPLE: Remove-ScheduledTask -ComputerName Server01 -TaskName MyTask
Function Remove-ScheduledTask
{
param(
[string]$ComputerName = "localhost",
[string]$TaskName = "blank"
)
If ((Get-ScheduledTask -ComputerName $ComputerName) -match $TaskName)
{
If ((Read-Host "Are you sure you want to remove task $TaskName from $ComputerName(y/n)") -eq "y")
{
$Command = "schtasks.exe /delete /s $ComputerName /tn $TaskName /F"
Invoke-Expression $Command
Clear-Variable Command -ErrorAction SilentlyContinue
}
}
Else
{
Write-Warning "Task $TaskName not found on $ComputerName"
}
}
# EXAMPLE: Create-ScheduledTask -ComputerName MyServer -TaskName MyTask02 -TaskRun "D:\scripts\script2.vbs"
Function Create-ScheduledTask
{
param(
[string]$ComputerName = "localhost",
[string]$RunAsUser = "System",
[string]$TaskName = "MyTask",
[string]$TaskRun = '"C:\Program Files\Scripts\Script.vbs"',
[string]$Schedule = "Monthly",
[string]$Modifier = "second",
[string]$Days = "SUN",
[string]$Months = '"MAR,JUN,SEP,DEC"',
[string]$StartTime = "13:00",
[string]$EndTime = "17:00",
[string]$Interval = "60"
)
Write-Host "Computer: $ComputerName"
$Command = "schtasks.exe /create /s $ComputerName /ru $RunAsUser /tn $TaskName /tr $TaskRun /sc $Schedule /mo $Modifier /d $Days /m $Months /st $StartTime /et $EndTime /ri $Interval /F"
Invoke-Expression $Command
Clear-Variable Command -ErrorAction SilentlyContinue
Write-Host "`n"
}
#%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -psconsolefile
#"%ProgramFiles%\Quest Software\Management Shell for AD\ConsoleSettings.psc1" -noexit -command
#". '%ProgramFiles%\Quest Software\Management Shell for AD\qsft.ps1'"
import-CSV .\shares.csv | Foreach-Object {Get-MyShares $_.Server} | Select Name, Caption, __Server | Format-Table
#Get-MyShares deepblack | Get-MySharePermissions deepblack $_ | Select ID, AccessMask, $_
#$hosts = import-CSV .\hosts.csv
#$data = import-CSV .\hosts.csv | Foreach-Object {Get-MyShares $_.Name}
No comments:
Post a Comment