requètes PowerShell

######################  Goupes AD vides

Get-ADGroup -Filter * -Properties Members | Where {-not $_.members} | select Name | Export-Csv c:\temp\EmptyADGroups.csv –NoTypeInformation

 

Récupérer la liste des hotfix installé sur un serveur distant

Get-HotFix -ComputerName xxxxxxxxxxxxxxx| Select HotfixID, Description, InstalledOn | Sort-Object -Descending

 

 

Feature

Get-WindowsFeature | Where-Object {$_.InstallState -eq « Available »}

Get-WindowsFeature | Where-Object {$_.InstallState -eq « Installed »}

 

########## Répertoire vide

$a = Get-ChildItem C:\Scripts -recurse | Where-Object {$_.PSIsContainer -eq $True}
$a | Where-Object {$_.GetFiles().Count -eq 0} | Select-Object FullName

############################ Secure passsword

$SecurePassword = ConvertTo-SecureString –String $Password –AsPlainText -Force

$Credential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $User, $SecurePassword

 

 

##################### Version OS

if (Get-WMIObject(win32_OperatingSystem).Version -eq ‘6.1.7600’){

Write-Host « `n Uniquement pour 2008r2. fin de script…`n » -ForegroundColor Red

Exit

}

 

 

########## Filtrer version OS sinon exit

if (Get-WMIObject(win32_OperatingSystem).Version -eq ‘6.1.7600’){

Write-Host « `n Uniquement pour 2008r2. fin de script…`n » -ForegroundColor Red

Exit

}

 

################# Disable firewall

netsh ADVfirewall set Allprofiles state off

 

######################## create central store

function CentralStore(){

$userdnsdomain = $env:userdnsdomain

$systemroot   = $env:systemroot

$logonserver   = $env:logonserver

xcopy /s /e /i $systemroot\PolicyDefinitions\* $logonserver\sysvol\$userdnsdomain\policies\PolicyDefinitions\

md $systemroot\sysvol\domain\scripts\COMMON

}

 

 

################### disable ipv6

function set-IPV6disable(){

$UnbindID = $(Get-WmiObject -Class ‘Win32_NetworkAdapter’ | Where-Object {$_.NetConnectionID -eq ‘Connexion au réseau local 1’}).GUID

$LinkageKey = $(Get-ItemProperty -Path ‘HKLM:\SYSTEM\CurrentControlSet\services\Tcpip6\Linkage’).Bind | Select-String -Pattern $UnbindID -NotMatch -SimpleMatch

Set-ItemProperty -Path ‘HKLM:\SYSTEM\CurrentControlSet\services\Tcpip6\Linkage’ -Name ‘Bind’ -Type MultiString -Value $LinkageKey

}

 

 

##########################################

# Import CSV

$path = »C:\Temp\Thomas\xxxxxxxx.csv »

$csv =@()

$csv =Import-Csv -Path $path

 

###############################

Foreach ($computer in $computers) {$computer.gettype()}

 

###############################

# To check the Trigger-Start service settings:

sc qtriggerinfo w32time

 

###############################

# version framework

get-childitem ‘HKLM:\software\microsoft\Net Framework setup\ndp’ | select-object @{Name= »Framework »;Expression={$_.PSChildname}},@{Name= »Service Pack »;Expression={$_.getvalue(« Sp »)}} |format-table -autosize

 

###############################

# Request java version

$computers=@(‘wcdr01061′,’WCDR102245’)

gwmi -Class Win32_Product -ComputerName $computers -Filter « Name like ‘Java%' » | Select __Server, Version | Export-Csv ‘c:\temp\thomas\java.csv’ -NoTYpeInfo

###############################

REGEX

$FileName = $i + « .txt »

$FilePath = $Path.split(« .* »)[0] + « \ » + $FileName

 

Format

| ft Name -HideTableHeaders -AutoSize -Wrap

 

###############################

# Reset the $Acl variable to $null

$Acl = $null;

 

##### create folder if not exist

If(!(Test-Path -Path $Path)){New-Item -ErrorAction Ignore -ItemType directory -Path $Path -force}

 

###############################

# Loop through all items in the CSV

ForEach ($item In $csv){#Check if the OU exists

If ($check -eq $True){

Try{

#Check if the Group already exists

$exists = Get-ADGroup $item.GroupName

Write-Host « Group $($item.GroupName) alread exists! Group creation skipped! »

}

Catch{

#Create the group if it doesn’t exist

$create = New-ADGroup -Name $item.GroupName -GroupScope $item.GroupType -Path ($($item.GroupLocation)+ », »+$($searchbase))

Write-Host « Group $($item.GroupName) created! »} }

Else{Write-Host « Target OU can’t be found! Group creation skipped! » }}

##### Browse and filter type file ####

[System.Reflection.Assembly]::LoadWithPartialName(« System.windows.forms ») | Out-Null

$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog

$OpenFileDialog.initialDirectory = $initialDirectory

$OpenFileDialog.filter = « CSV (*.csv)| *.csv »

$OpenFileDialog.ShowDialog() | Out-Null

 

 

###############################

##### new GUID aléatoire

$JobGuid = [GUID]::NewGuid().tostring()

 

###############################

# Ping adresse et resultat

for ($i=1;$i -le $intping; $i++)

{$strQuery = « select * from win32_pingstatus where address = ‘ » + $Intnetwork + $i + « ‘ »

$wmi = Get-WmiObject -query $strQuery

« Pinging $intNetwork … »

if ($wmi.statuscode -eq 0)

{« success »}

else{« error: » + $wmi.statuscode +  » occured »}}

 

###############################

# List des groupes locaux

#Get-LocalGroup.ps1

[cmdletBinding()]

param(

[Parameter(Mandatory=$false)]

[string]$computer=$env:COMPUTERNAME)

 

$connexion=[ADSI] »WinNT://$computer »

$connexion.PSBase.Children|?{$_.PSBase.SchemaClassName -eq ‘group’}|Select-Object -ExpandProperty Name

 

###############################

groupType :

2 Global

4 LocalGroup

8 Universel

 

####### format

| Format-Wide -Property DisplayName -Column 6

| Format-List –Property *

| Format-Table name,id –AutoSize

 

####### filtering

| Where-Object {$_.Status -eq “Running”}

  • eq (Equal To)
  • neq (Not Equal To)
  • gt (Greater Than)
  • ge (Greater Than or Equal To)
  • lt (Less Than)
  • le (Less Than or Equal To)
  • like (Wildcard String Match)

-match

 

Compare-Object

ForEach-Object

Group-Object

Measure-Object

New-Object

Select-Object

Sort-Object

Tee-Object

Where-Object -v- Filter

 

select -First 5

 

…….-and $_.name -eq « svchost »}

{$_.length -gt 100000}

 

$s = get-wmiobject win32_service

$s[0] | gm

 

…..} | export-csv c:\services.csv

convertto-html | out-file c:\services.html

 

$file | select Name, @{Name=’LengthKB’; `Expression={$_.Length/1024}} | Format-List

 

Select-String -Path C:\DataFiles\*.txt `-Pattern ‘error output’

http://windowsitpro.com/powershell/powershell-basics-filtering-objects

 

 

###############################

##   Array

To initialise

$a = 1,2,4,8

To query

$b = $a[3]

CSV

$array = Import-Csv mon.csv -Delimiter « ; »

 

###############################

# Fusionner 2 CSV

$getFirstLine = $true

get-childItem « YOUR_DIRECTORY\*.txt »|foreach{

$filePath = $_

$lines = $lines = Get-Content $filePath

$linesToWrite = switch($getFirstLine){

$true {$lines}

$false {$lines|Select -Skip 1}}

$getFirstLine = $false

Add-Content « YOUR_DESTINATION_FILE » $linesToWrite}

 

###############################

# Actual date prepare

$Date = Get-Date -Format ddMMyyyy

 

###############################

# gerer format .csv UTF8…

http://www.questcequecest.com/powershell-commandes-pour-manipuler-les-formats-de-fichiers/

 

******************* EMAIL *********************

# Preparing the body of the Email

$body = « <h2>Group: $($GroupName.NTAccountName)</h2> »

$body += « <p style=` »background-color:white;font-family:consolas;font-size:8pt` »> »

$body += « <u>Group Description:</u> $($GroupName.Description)<br> »

$body += « <u>Group DN:</u> $($GroupName.DN)<br> »

$body += « <u>Group CanonicalName:</u> $($GroupName.CanonicalName)<br> »

$body += « <u>Group SID:</u> $($GroupName.Sid)<br> »

$body += « <u>Group Scope/Type:</u> $($GroupName.GroupScope) / $($GroupName.GroupType)<br> »

$body += « </p> »

$body += « <h3> Membership Change »

$body += « </h3> »

$body += « <i>The membership of this group changed. See the following Added or Removed members.</i> »

$body += $changes | ConvertTo-Html -head $head | Out-String

$body += « <br><br><br> »

IF ($ChangesHistoryFiles){

$body += « <h3>Change History</h3> »

$body += « <i>List of the previous changes on this group observed by the script</i> »

$body += $infoChangeHistory | Sort-Object -Property DateTime -Descending | ConvertTo-Html -Fragment -PreContent $Head2| Out-String

}

$body = $body -replace « Added », »<font color=` »blue` »><b>Added</b></font> »

$body = $body -replace « Removed », »<font color=` »red` »><b>Removed</b></font> »

$body += $Report

# Preparing the Email properties

$SmtpClient = New-Object -TypeName system.net.mail.smtpClient

$SmtpClient.host = $EmailServer

$MailMessage = New-Object -TypeName system.net.mail.mailmessage

# $MailMessage.from = $EmailFrom.Address

$MailMessage.from = $EmailFrom

# FOREACH ($To in $Emailto){$MailMessage.To.add($($To.Address))}

FOREACH ($To in $Emailto){$MailMessage.To.add($($To))}

$MailMessage.IsBodyHtml = 1

$MailMessage.Subject = $EmailSubject

$MailMessage.Body = $Body

# Sending the Email

$SmtpClient.Send($MailMessage)

Write-Verbose -Message « $item – Email Sent. »

Laisser un commentaire