Wednesday, May 2, 2012

Get-MySharePermissions, Get-MyShares, Get-ScheduledTask, Create-ScheduledTas

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: