Guest User

FunctionImports.ps1

a guest
Oct 11th, 2015
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ####################################################################################
  2. ### Functions Library, v.1.2.1
  3. ### Efimov (ge][) Gennady, http://gexeg.blogspot.com/
  4. ####################################################################################
  5.  
  6. function GetObjects2($root, $filter, [string[]]$attrs){
  7.     if (-not $root){
  8.         return GetObjects -SourceDomain $root -filter $filter -attrs $attrs
  9.     }
  10.     $rootObj = [adsi]$root
  11.     $searcher = New-Object System.DirectoryServices.DirectorySearcher($rootObj, $filter, $attrs)
  12.     $searcher.PageSize = 1000
  13.     $searchResult = $searcher.FindAll()
  14.     return $searchResult
  15. }
  16.  
  17. function GetGCRootNCObj($GCServer){
  18.     $rootDSETargetGC = [adsi]"LDAP://$GCServer/RootDSE"
  19.     $TargetRootNC = $rootDSETargetGC.rootDomainNamingContext
  20.     $rootGCSearch = [adsi]("GC://$GCServer/$TargetRootNC")
  21.     return $rootGCSearch
  22. }
  23.  
  24. function ConvertByteArrayToLDAPString($byteArray){
  25.     [string]$result = "";
  26.     foreach ($byte in $byteArray){
  27.         $result += "\" + $byte.ToString("X2");
  28.     }
  29.     return $result;
  30. }
  31.  
  32. function GetObjects($SourceDomain, $filter, [string[]]$attrs, $UserName, $UserPassword){
  33.     if (-not $SourceDomain){
  34.         $SourceDomain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().Name
  35.     }
  36.    
  37.     if ($UserName -and $UserPassword){
  38.         $ctx = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext(`
  39.             [System.DirectoryServices.ActiveDirectory.DirectoryContextType]::Domain, $SourceDomain, $UserName, $UserPassword)
  40.     }
  41.     else {
  42.         $ctx = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext(`
  43.             [System.DirectoryServices.ActiveDirectory.DirectoryContextType]::Domain, $SourceDomain)
  44.     }
  45.    
  46.     $domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($ctx)
  47.     $rootobj = $domain.GetDirectoryEntry()
  48.     $searcher = New-Object System.DirectoryServices.DirectorySearcher($rootobj, $filter, $attrs)
  49.     $searchResult = $searcher.FindAll()
  50.     return $searchResult
  51. }
  52.  
  53. function GetComputerObj($SourceDomain, $ComputerName){
  54.     $ctx = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext(`
  55.         [System.DirectoryServices.ActiveDirectory.DirectoryContextType]::Domain, $SourceDomain)
  56.     $domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($ctx)
  57.     $rootobj = $domain.GetDirectoryEntry()
  58.     $searcher = New-Object System.DirectoryServices.DirectorySearcher($rootobj, `
  59.         "(&(objectCategory=computer)(objectClass=computer)(sAMAccountName=$ComputerName))")
  60.     $searchResult = $searcher.FindAll()
  61.     if ($searchResult.Count -eq 0){ throw "Ошибка. Компьютер $ComputerName не найден" }
  62.     if ($searchResult.Count -gt 1){ throw "Ошибка. Найдено более одного объекта для $ComputerName" }
  63.     $compObj = $searchResult[0].GetDirectoryEntry()
  64.     return [object]$compObj
  65. }
  66.  
  67. function GetUserObj($SourceDomain, $UserName){
  68.     $ctx = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext(`
  69.         [System.DirectoryServices.ActiveDirectory.DirectoryContextType]::Domain, $SourceDomain)
  70.     $domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($ctx)
  71.     $rootobj = $domain.GetDirectoryEntry()
  72.     $searcher = New-Object System.DirectoryServices.DirectorySearcher($rootobj, `
  73.         "(&(objectCategory=user)(objectClass=user)(sAMAccountName=$UserName))")
  74.     $searchResult = $searcher.FindAll()
  75.     if ($searchResult.Count -eq 0){ throw "Ошибка. Пользователь $UserName не найден" }
  76.     if ($searchResult.Count -gt 1){ throw "Ошибка. Найдено более одного объекта для $UserName" }
  77.     $compObj = $searchResult[0].GetDirectoryEntry()
  78.     return [object]$compObj
  79. }
  80.  
  81. function GetGroupObj($SourceDomain, $GroupName){
  82.     $ctx = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext(`
  83.         [System.DirectoryServices.ActiveDirectory.DirectoryContextType]::Domain, $SourceDomain)
  84.     $domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($ctx)
  85.     $rootobj = $domain.GetDirectoryEntry()
  86.     $searcher = New-Object System.DirectoryServices.DirectorySearcher($rootobj, `
  87.         "(&(objectCategory=group)(objectClass=group)(sAMAccountName=$GroupName))")
  88.     $searchResult = $searcher.FindAll()
  89.     if ($searchResult.Count -eq 0){ throw "Ошибка. Группа $GroupName не найден" }
  90.     if ($searchResult.Count -gt 1){ throw "Ошибка. Найдено более одного объекта для $GroupName" }
  91.     $groupObj = $searchResult[0].GetDirectoryEntry()
  92.     return [object]$groupObj
  93. }
  94.  
  95. function DisableComputer($ComputerObject){
  96.     #$compObj = [System.DirectoryServices.DirectoryEntry]$ComputerObject
  97.     $ComputerObject.PsBase.InvokeSet("AccountDisabled", $true)
  98.     $ComputerObject.PsBase.CommitChanges()
  99. }
  100.  
  101. function SetUserEnabled($UserObject, $State){
  102.     #$compObj = [System.DirectoryServices.DirectoryEntry]$ComputerObject
  103.     $UserObject.PsBase.InvokeSet("AccountDisabled", $(-not $State))
  104.     $UserObject.PsBase.CommitChanges()
  105. }
  106.  
  107. function SetUserExpire($UserObject, [double]$NumDay){
  108.     if ($NumDay -eq 0) {
  109.         $UserObject.AccountExpires = 0
  110.     }
  111.     else {
  112.         $date_ = [System.DateTime]::Now.AddDays($NumDay)
  113.         $UserObject.PsBase.InvokeSet("AccountExpirationDate", $date_)
  114.     }
  115.     $UserObject.PsBase.CommitChanges()
  116. }
  117.  
  118. function SetMustChangePasswordEnabled($UserObject, $State){
  119.     if ($State){
  120.         $UserObject.PsBase.InvokeSet("pwdLastSet", 0)
  121.     }
  122.     else {
  123.         $UserObject.PsBase.InvokeSet("pwdLastSet", -1)
  124.     }
  125.     $UserObject.PsBase.CommitChanges()
  126. }
  127.  
  128. function SetUserPassword($UserObject, $Password){
  129.     $UserObject.PsBase.Invoke("SetPassword", $Password)
  130.     $UserObject.PsBase.CommitChanges()
  131. }
  132.  
  133. function ClearSPN($ComputerObject){
  134.     #$ComputerObject= [System.DirectoryServices.DirectoryEntry]$ComputerObject
  135.     $ComputerObject.Properties["servicePrincipalName"].Clear()
  136.     $ComputerObject.PSBase.CommitChanges()
  137. }
  138.  
  139. function GetWindowsDir($computerName){
  140.     $osObj = Get-WmiObject -ComputerName $computerName -Class Win32_OperatingSystem
  141.     if ($osObj){
  142.         return $osObj.WindowsDirectory
  143.     }
  144.        
  145.     trap {
  146.         Write-Host $_ -ForegroundColor Red -BackgroundColor Black
  147.         return ""
  148.     }
  149. }
  150.  
  151. function GetWindowsVersion($computerName){
  152.     $osObj = Get-WmiObject -ComputerName $computerName -Class Win32_OperatingSystem
  153.     if ($osObj){
  154.         return $osObj.Version
  155.     }
  156.        
  157.     trap {
  158.         Write-Host $_ -ForegroundColor Red -BackgroundColor Black
  159.         return ""
  160.     }
  161. }
  162.  
  163. function StopService($computerName, $serviceName){
  164.     $svcObj = Get-WmiObject -ComputerName $computerName -Class Win32_Service -Filter "Name='$serviceName'"
  165.     if ($svcObj){
  166.         $result = $svcObj.StopService()
  167.         return $result.ReturnValue
  168.     }
  169. }
  170.  
  171. function StartService($computerName, $serviceName){
  172.     $svcObj = Get-WmiObject -ComputerName $computerName -Class Win32_Service -Filter "Name='$serviceName'"
  173.     if ($svcObj){
  174.         if (-not $svcObj.Started){
  175.             $result = $svcObj.StartService()
  176.             return $result.ReturnValue
  177.         }
  178.         return 0
  179.     }
  180. }
  181.  
  182. function GPUpdate($computerName){
  183.     $result = Invoke-WmiMethod -ComputerName $ComputerName -Class Win32_Process -Name "Create" -ArgumentList @("gpupdate.exe /target:computer /force")
  184.     return $result.ReturnValue
  185. }
  186.  
  187. function SecEditRefreshPolicy($computerName){
  188.     $result = Invoke-WmiMethod -ComputerName $ComputerName -Class Win32_Process -Name "Create" -ArgumentList @("secedit.exe /refreshpolicy machine_policy")
  189.     return $result.ReturnValue
  190. }
  191.  
  192. Function RemoveExch2k3Attrib($obj){
  193.  
  194.     [string[]]$attribArr = "homeMTA", "proxyAddresses", "homeMDB", "mDBUseDefaults", "mailNickname", "showInAddressBook", "legacyExchangeDN", "textEncodedORAddress", "mail", `
  195.     "msExchHomeServerName", "msExchALObjectVersion", "msExchMailboxSecurityDescriptor", "msExchUserAccountControl", "msExchMailboxGuid", "msExchPoliciesIncluded", "mAPIRecipient", `
  196.     "autoReplyMessage", "adminDisplayName", "msExchADCGlobalNames", "msExchHideFromAddressLists", "targetAddress", "internetEncoding", "mDBStorageQuota",  "mDBOverQuotaLimit", `
  197.     "mDBOverHardQuotaLimit", "deletedItemFlags", "garbageCollPeriod", "authOrig", "dLMemSubmitPerms", "unauthOrig", "dLMemRejectPerms", "submissionContLength", "delivContLength", "altRecipient", `
  198.     "deliverAndRedirect", "publicDelegates", "extensionAttribute1", "extensionAttribute2", "extensionAttribute3", "extensionAttribute4", "extensionAttribute5", "extensionAttribute6", `
  199.     "extensionAttribute7", "extensionAttribute8", "extensionAttribute9", "extensionAttribute10", "extensionAttribute11", "extensionAttribute12", "extensionAttribute13", `
  200.     "extensionAttribute14", "extensionAttribute15", "protocolSettings", "displayNamePrintable", "folderPathname", "securityProtocol", "msExchExpansionServerName", `
  201.     "msExchOmaAdminWirelessEnable", "msExchOmaAdminExtendedSettings", "msExchFBURL", "msExchResourceGUID", "dLMemDefault", "msExchControllingZone", "msExchPoliciesExcluded", `
  202.     "msExchMasterAccountSid", "msExchRecipLimit", "deliveryMechanism", "delivExtContTypes", "dnQualifier", "enabledProtocols", "expirationTime", "extensionData", `
  203.     "formData", "forwardingAddress", "importedFrom", "language", "languageCode", "msExchCustomProxyAddresses", "msExchPolicyEnabled", "msExchPolicyOptionList", "msExchPreviousAccountSid", `
  204.     "msExchProxyCustomProxy", "pOPCharacterSet", "pOPContentFormat", "replicationSensitivity", "heuristics", "msExchInconsistentState", "msExchUnmergedAttsPt", "replicatedObjectVersion", `
  205.     "replicationSignature", "unmergedAtts", "autoReply", "msExchMailboxUrl", "msExchPfRootUrl", "msExchUseOAB"
  206.  
  207.     foreach ($attr in $attribArr){
  208.        $obj.PSBase.Invoke("PutEx", [object[]](1, $attr, 0));
  209.     }
  210.  
  211.     $obj.PSBase.CommitChanges();
  212.     if (-not $?){
  213.         throw "Не удалось удалить атрибуты у " + $obj.name
  214.     }
  215. }
  216.  
  217. #function GetRemoteRegistryKey($machineName, [Microsoft.Win32.RegistryHive]$hive="LocalMachine", $subPath, `
  218. #                                       [System.Security.AccessControl.RegistryRights]$accessLevel="QueryValues"){
  219.  
  220. #for AccessLevel values see RegistryRights Enumeration type in msdn
  221. function GetRemoteRegistryKey($machineName, [Microsoft.Win32.RegistryHive]$hive="LocalMachine", $subPath){
  222.     $result = $null
  223.     $regRootKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($hive, $machineName)
  224.     if ($regRootKey){
  225.         return $regRootKey.OpenSubKey($subPath, [Microsoft.Win32.RegistryKeyPermissionCheck]::Default)
  226.     }
  227.     return $result
  228. }
  229.  
  230. function GetKeyValue([Microsoft.Win32.RegistryKey]$regKey, [System.String]$valueName){
  231.     $result = $null
  232.     if ($regKey){
  233.         return $regKey.GetValue($valueName)
  234.     }
  235.     return $result
  236. }
  237.  
  238. function GetWMIClassPropertyArr($className, $server){
  239.     if (-not $server){
  240.         $server = "localhost"
  241.     }
  242.     $mgmtpath = New-Object System.Management.ManagementPath
  243.     $mgmtpath.ClassName = $className
  244.     $mgmtpath.Server = $server
  245.     $class = New-Object System.Management.ManagementClass($mgmtpath)
  246.     $propertyArr = @()
  247.     if ($class){
  248.         foreach ($property in $class.PSBase.Properties){
  249.             $propertyArr += $property.Name
  250.         }
  251.     }
  252.     return $propertyArr
  253. }
  254.  
  255. function GetProducts($computername){
  256.     $products = @()
  257.     $regkey = GetRemoteRegistryKey -machineName $computername -hive LocalMachine -subPath "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
  258.     $subkeys = $regkey.GetSubKeyNames()
  259.     foreach($subkey in $subkeys){
  260.         $subkey = $regkey.OpenSubKey($subkey, $false)
  261.         $val = $subkey.GetValue("ParentKeyName")
  262.         if ($subkey.GetValue("DisplayName") -and -not $subkey.GetValue("ParentKeyName")){
  263.             $product = New-Object System.Object
  264.             $product | Add-Member -Name "__SERVER" -MemberType NoteProperty -Value $computername
  265.             $product | Add-Member -Name "Name" -MemberType NoteProperty -Value $subkey.GetValue("DisplayName")
  266.             $product | Add-Member -Name "DisplayVersion" -MemberType NoteProperty -Value $subkey.GetValue("DisplayVersion")
  267.             $product | Add-Member -Name "EstimatedSize" -MemberType NoteProperty -Value $subkey.GetValue("EstimatedSize")
  268.             $product | Add-Member -Name "InstallDate" -MemberType NoteProperty -Value $subkey.GetValue("InstallDate")
  269.             $product | Add-Member -Name "Language" -MemberType NoteProperty -Value $subkey.GetValue("Language")
  270.             $product | Add-Member -Name "Vendor" -MemberType NoteProperty -Value $subkey.GetValue("Publisher")
  271.             $product | Add-Member -Name "Version" -MemberType NoteProperty -Value $subkey.GetValue("Version")
  272.             $product | Add-Member -Name "VersionMajor" -MemberType NoteProperty -Value $subkey.GetValue("VersionMajor")
  273.             $product | Add-Member -Name "VersionMinor" -MemberType NoteProperty -Value $subkey.GetValue("VersionMinor")
  274.             $products += $product
  275.         }
  276.     }
  277.     $regkey.Close()
  278.     return $products
  279. }
Advertisement
Add Comment
Please, Sign In to add comment