Voici quelques exemples de scripts powershell
#Récupère la clé produit de Windows
# Création de la table de conversion base 24
$map="BCDFGHJKMPQRTVWXY2346789"
# Lecture de la clé de registre
$value = (get-itemproperty "HKLM:\\SOFTWARE\Microsoft\Windows NT\CurrentVersion").digitalproductid[0x34..0x42]
# Conversion des valeurs en Hexa pour afficher le Raw Key $hexa = ""
$value | foreach {
$hexa = $_.ToString("X2") + $hexa
}
Write-Output "Raw Key Big Endian: $hexa"
# Calcul du Product Key
$ProductKey = ""
for ($i = 24; $i -ge 0; $i--) {
$r = 0
for ($j = 14; $j -ge 0; $j--) {
$r = ($r * 256) -bxor $value[$j]
$value[$j] = [math]::Floor([double]($r/24))
$r = $r % 24
}
if (($i % 5) -eq 0 -and $i -ne 0) {
$ProductKey = "-" + $ProductKey
}
}
Write-Output "Product Key: $ProductKey"
#création de l'instance de l'objet WMI
$elements = get-WmiObject Win32_LogicalDisk
$taille_totale = 0 # initialisation de la variable
# boucle pour parcourir tous les disques
foreach ( $disque in $elements ) {
# calul de la taille en Giga octet
$taille = $disque.freespace / (1024*1024*1024)
$taille = [math]::round($taille, 1) # Arrondi la taille à 1 décimale
$nom=$disque.Name
$taille_totale = $taille_totale + $taille
write-host "Le disque :$nom a $taille Go de disponible"
}
write-host "Taille disponible cumulée = $taille_totale Go"
ou
# get-freespace.ps1
param ($computer = ".")
# récupérer tous les disques logiques de l'ordinateur:
get-wmiobject -computer $computer win32_logicaldisk | where {$_.drivetype -eq 3} | tee-object -variable disques |
select-object @{e={$_.systemname};n="Système"},
@{e={$_.name};n="Disque"},
@{e={[math]::round($_.size/1GB,2)};n="Capacité (Go)"},
@{e={[math]::round($_.freespace/1GB,1)};n="Disponible (Go)"}
@{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n="(%)"}
Sleep 30
#Compress and zip file
function Compress-ToZip
{
param([string]$zipfilename)
if(-not (test-path($zipfilename)))
{
set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(Get-ChildItem $zipfilename).IsReadOnly = $false
}
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
foreach($file in $input)
{
$zipPackage.CopyHere($file.FullName)
Start-sleep -milliseconds 500
}
}
#Copy and zip file
param ([string]$Workspace,[string]$BuildNumber,[string]$Exefilename,[string]$Issoutput,[string]$Zipfilename,[string]$Manualfiles,[string]$SMBUser,[string]$SMBPassword,[string]$ZipDestination)
$Source = "$Workspace\Temp"
#Nettoyage du workspace si besoin
If(Test-path $Source)
{
Write-Host "Nettoyage de $Workspace Requis"
Remove-Item -Path $Source -Force -Recurse -Confirm:$false
}
#Copie des Fichiers Nécessaires
$Date = Get-Date -format "yyyy-MM-dd"
$Zipfilename = "$Zipfilename$Date.$BuildNumber"
Write-Host "Création du dossier $Source\$Zipfilename"
mkdir -Path "$Source\$Zipfilename"
Write-Host "Copie de $Issoutput\$Exefilename.exe vers $Source\$Zipfilename"
Copy-Item -Path "$Issoutput\$Exefilename.exe" -Destination "$Source\$Zipfilename" -Force
#Write-Host "Copie de $Manualfiles\* vers $Source\$Zipfilename"
#Copy-Item -Path "$Manualfiles\*" -Destination "$Source\$Zipfilename" -Force -Recurse
#Zip des fichiers
Write-Host "Zip du répertoire $Source\$Zipfilename en $Zipfilename.zip"
Add-Type -As System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory( "$Source\$Zipfilename", "$Source\$Zipfilename.zip", "Optimal", $true )
#Copy du zip vers le partage réseau
Write-Host "Copie de $Source\$Zipfilename.zip vers $ZipDestination"
$secpasswd = ConvertTo-SecureString $SMBPassword -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($SMBUser, $secpasswd)
New-PSDrive -Name M -PSProvider FileSystem -Root $ZipDestination -Credential $mycreds
Copy-Item -Path "$Source\$Zipfilename.zip" -Destination M: -Force
Remove-PSDrive M
#Envoi de fichier via winscp en powershell
#Variables SFTP
$serveurftp="X.X.X.X"
$userftp="user_ftp"
$pwdftp=":password"
# Debut du script
# liste des fichiers des répertoires PUT
# Stocke cette liste dans la variables fichiers
$fichiers= dir E:\ftp\ADP\*\put\*
#préparation du script winscp d'envois
write-output "option batch on" |out-file $scriptdir\puttmp.scp -Encoding ASCII
write-output "option confirm off" |out-file $scriptdir\puttmp.scp -Encoding ASCII -append
#positionnement dans le répertoire de destination
write-output "cd $destdir" |out-file $scriptdir\puttmp.scp -Encoding ASCII -append
#pour chaque fichier contenu dans la liste fichiers
#crypte le fichier avec gnupg et l'ajoute dans le script sftp
foreach ($fichier in $fichiers){
$nomfic=$fichier.name
$nomdir=$fichier.directoryname
#sauvegarde le fichier dans un rep archive et supprime le fichier .enc s'il éxiste déja
cd $fichier.directoryname
copy-item $fichier ..\archive
remove-item $crypteddir\$nomfic.enc
#cryptage du fichier
write-output $pass|e:\gnupg\gpg --no-tty --batch --passphrase-fd 0 --quiet --yes -eas -u $gpguser -r $target -o $crypteddir\$nomfic.enc $fichier.fullname
#création du fichier .ok
new-item $crypteddir\$nomfic.enc.ok -type file -force
#ajout du nom du fichier crypté dans le script sftp
write-output "put $crypteddir\$nomfic.enc" |out-file $scriptdir\puttmp.scp -Encoding ASCII -append
write-output "put $crypteddir\$nomfic.enc.ok" |out-file $scriptdir\puttmp.scp -Encoding ASCII -append
}
#finalisation du script sftp
write-output "exit" |out-file $scriptdir\puttmp.scp -append -Encoding ASCII
#Execution du script sftp
winscp3.exe /console /script=$scriptdir\puttmp.scp$userftp$pwdftp@$serveurftp
#Création d'un partage de dossier
Function New-Share([String] $Path,
[String] $Name,
[uint32] $Type,
[uint32] $MaximumAllowed,
[String] $Description,
[String] $Password,
#[System.Management.ManagementClass] $Access)
$Access)
{
if ($Access -ne $NULL)
{ if ($Access.__CLASS -ne "Win32_SecurityDescriptor")
{Throw "Le paramètre Acces n'est pas une instance de la classe Win32_SecurityDescriptor"}
}
if ((Get-Service|where {$_.Name -eq "winmgmt"}).Status -eq "Stopped")
{Throw "Le service d'infrastructure de gestion Windows (winmgmt) est arrêté. Impossible de continuer"}
$Share = [WMIClass] "Win32_Share"
if ($Share -eq $Null)
{Throw "Erreur lors de la création d'une instance de la classe Win32_Share"}
$CodeRetour=($Share.Create($Path,$Name,$Type,$MaximumAllowed,$Description,$Password,$Access)).ReturnValue
Switch ($CodeRetour)
{
0 {$MsgErreur="Opération terminée correctement.";Break}
2 {$MsgErreur="L'utilisateur n'a pas accès aux informations requises.";Break}
8 {$MsgErreur="Échec inconnu.";Break}
9 {$MsgErreur="Le nom du caractère ou du système de fichiers n'est pas valide.";Break}
10 {$MsgErreur="La valeur spécifiée pour le paramètre de niveau est non valide.";Break}
21 {$MsgErreur="Le paramètre spécifié est non valide.";Break}
22 {$MsgErreur="Le nom du partage est déjà en cours d'utilisation sur ce serveur.";Break}
23 {$MsgErreur="L'opération est non valide pour une ressource redirigée. Le nom de périphérique spécifié est
assigné à une ressource partagée.";Break}
24 {$MsgErreur="Le périphérique ou le répertoire n'existe pas.";Break}
25 {$MsgErreur="Le nom de partage n'existe pas.";Break}
Default {$MsgErreur="Référez-vous à la documentation concernant les codes d'erreur Win32. Code erreur : $CodeRetour"}
}
if ($CodeRetour -ne 0) {Throw $MsgErreur}
if ($Access -eq $NULL)
{ #Comportement par défaut avec WMI si on ne renseigne aucun ACL
Write-Warning "Le share $Name a été créé avec le droit 'Full control' pour le groupe 'Tout le monde'."}
}
#Import de user via un csv AD (AD=Active directory)
Import-Module ActiveDirectory
$character = "@"
$objects= Import-Csv -Path C:\Windows\System32\DECIPLEX.csv -Delimiter ";"
foreach ($object in $objects){
$nom = $object.Lastname
$prenom = $object.Firstname
$departement = $object.department
$function = $object.function
New-ADOrganizationalUnit -Name $departement -Path "DC=deciplex,DC=lan"
New-ADGroup -Name $function -GroupScope Universal -Path "OU=$departement,DC=deciplex,DC=lan"
New-ADUser -SamAccountName $nom -Surname $prenom -UserPrincipalName $nom+"@deciplex.lan" -Name $nom -DisplayName $nom -GivenName $prenom -AccountPassword (ConvertTo-SecureString "P@ssword" -AsPlainText -force) -Enabled $True -ChangePasswordAtLogon $True -PassThru
Add-ADGroupMember -Identity "$function" -Member $nom
New-MailboxDatabase -Name "$departement" -server ‘srv’ -EdbFilePath c:\Mailboxdb\$departement.edb
Mount-Database -Identity Deciplex\$departement
Enable-Mailbox -Identity Deciplex\$nom -Database $departement
New-DistributionGroup -DisplayName $function -Name $function
Add-DistributionGroupMember -Identity $function -Member $nom
}
#Export de mailbox Exchange server
foreach ($i in (Get-Mailbox)) {
New-MailboxExportRequest -Mailbox $i -FilePath "\\ EGILIA-EXCH \ ExportsPST \$($i.Alias).pst" }
#MailTips Exchange
Set-OrganizationConfig -MailTipsAllTipsEnabled $true
Set-OrganizationConfig -MailTipsGroupMetricsEnabled $true
Set- OrganizationConfig MailTipsLargeAudienceThreshold 20
Set-Mailbox -MailTip "se mail ne sera pas envoyé"
#Ecrire dans un fichier XML
param ([string]$BuildNumber, [string]$ParametersIhmFile)
$Date = Get-Date -format "yyyy-MM-dd"
$FixedInVersion = "$Date.$BuildNumber"
Write-Host "affiche le contenu du fichier ParametersIhmFile " -foregroundcolor red -backgroundcolor blue
Get-Content -Path $ParametersIhmFile;
Write-Host "lecture du fichier ParametersIhmFile " -foregroundcolor red -backgroundcolor blue
[XML] $xmlDoc = Get-Content ($ParametersIhmFile);
Write-Host "ecriture des enfants parameters " -foregroundcolor red -backgroundcolor blue
$newXmlParameter = $xmlDoc.parameters.AppendChild($xmlDoc.CreateElement("parameter", $xmlDoc.DocumentElement.NamespaceURI));
$newXmlParameter.SetAttribute("name","release_number");
Write-Host "ecriture label " -foregroundcolor red -backgroundcolor blue
$newXmLabelElement = $newXmlParameter.AppendChild($xmlDoc.CreateElement("label"));
$newXmlLabelTextNode = $newXmLabelElement.AppendChild($xmlDoc.CreateTextNode("Release number"));
Write-Host "ecriture value date et du buildnumber " -foregroundcolor red -backgroundcolor blue
$newXmlValueElement = $newXmlParameter.AppendChild($xmlDoc.CreateElement("value"));
$newXmlValueTextNode = $newXmlValueElement.AppendChild($xmlDoc.CreateTextNode("$FixedInVersion"));
Write-Host "sauvegarde du fichier" -foregroundcolor red -backgroundcolor blue
$xmlDoc.Save($ParametersIhmFile);
#Ouvrir une page web via powershell
(new-object -com shell.application).ShellExecute('https://google.fr')
#Purge de fichier avec extension supérieur à 15 jours ".log"
$Now = Get-Date
$Days = "15"
$TargetFolder = "C:\*\log","C:\*\*\log","C:\inetpub\logs\LogFiles\W3SVC1"
$Extension = "*.log","*log20*"
$LastWrite = $Now.AddDays(-$Days)
$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}
foreach ($File in $Files)
{
if ($File -ne $NULL)
{
write-host "Deleting File $File" -ForegroundColor "DarkRed"
Remove-Item $File.FullName | out-null
}
else
{
Write-Host "No more files to delete!" -foregroundcolor "Green"
}
}
#Purge de fichier avec extension ".log"
$Now = Get-Date
$LastWrite = $Now.AddDays(7)
$Files = get-childitem -Path "D:\Documents and Settings\*\Desktop\test" -include *.log -recurse |Where {$_.LastWriteTime -le "$LastWrite"}
foreach ($File in $Files){
if ($File) {
write-host "Deleting File '$File'"
Remove-Item $File | out-null
}
}
#Monitoring website ( en powershell v3 uniquement)
#The URI list to test
$URLListFile = "C:\URL.txt"
$URLList = Get-Content $URLListFile -ErrorAction SilentlyContinue
$Result = @()
Foreach($Uri in $URLList) {
$time = try{
$request = $null
## Request the URI, and measure how long the response took.
$result1 = Measure-Command { $request = Invoke-WebRequest -Uri $uri }
$result1.TotalMilliseconds
}
catch
{
<# If the request generated an exception (i.e.: 500 server
error or 404 not found), we can pull the status code from the
Exception.Response property #>
$request = $_.Exception.Response
$time = -1
}
$result += [PSCustomObject] @{
Time = Get-Date;
Uri = $uri;
StatusCode = [int] $request.StatusCode;
StatusDescription = $request.StatusDescription;
ResponseLength = $request.RawContentLength;
TimeTaken = $time;
}
}
#Prepare email body in HTML format
if($result -ne $null)
{
$Outputreport = "<HTML><TITLE>Website Availability Report</TITLE><BODY background-color:peachpuff><font color =""#99000"" face=""Microsoft Tai le""><H2> Website Availability Report </H2></font><Table border=1 cellpadding=0 cellspacing=0><TR bgcolor=green align=center><TD><B>URL</B></TD><TD><B>StatusCode</B></TD><TD><B>StatusDescription</B></TD><TD><B>ResponseLength</B></TD><TD><B>TimeTaken</B></TD</TR><TD><B>Check Appli</B></TD><TD><B>Comments</B></TD>"
Foreach($Entry in $Result)
{
if($Entry.StatusCode -ne "200")
{
$Outputreport += "<TR bgcolor=red>"
}
else
{
$Outputreport += "<TR>"
}
$Outputreport += "<TD>$($Entry.uri)</TD><TD align=center>$($Entry.StatusCode)</TD><TD align=center>$($Entry.StatusDescription)</TD><TD align=center>$($Entry.ResponseLength)</TD><TD align=center>$($Entry.timetaken)</TD></TR>"
}
$Outputreport += "</Table></BODY></HTML>"
}
$Outputreport | out-file C:\WebsiteMonitoring.html
Invoke-Expression C:\WebsiteMonitoring.html
#Telecharger un fichier sur une page web
$url = "http://go.microsoft.com/fwlink/?LinkID=121721&arch=x86";
$file = "D:\Documents and Settings\*\My Documents\Downloads\32.exe";
$Wget = New-Object System.Net.WebClient
$Wget.DownloadFileAsync($url,$file)
#Auto login sur une page web
$url = "http://gfsgh.com"
$username="WSUSER"
$password="WSUSER"
$ie = New-Object -com internetexplorer.application;
$ie.visible = $true;
$ie.navigate($url);
while ($ie.Busy -eq $true)
{
Start-Sleep -Milliseconds 1000;
}
$ie.Document.getElementById(“LoginView1_Login1_UserName”).value = $username
$ie.Document.getElementById(“LoginView1_Login1_MyPassword”).value=$password
$ie.Document.getElementById(“LoginView1_Login1_LoginButton”).click();
$cmd.Quit();
ou
$Url = ""http://test vlskj.fr""
$Path = "C:\test"
$Username = "gkbln"
$Password = "fqdhgsglmkjdfxnmvml"
$WebClient = New-Object System.Net.WebClient
$WebClient.Credentials = New-Object System.Net.Networkcredential($Username, $Password)
$WebClient.DownloadFile( $url, $path )
#Connaitre quel user est connecté sur un ordinateur distant
$computer = Read-Host « Enter the computer Name »
$loginfo = Get-WmiObject -Computer $Computer -Class Win32_ComputerSystem
« Machine Name: » + $loginfo.Name
« User Name: » + $loginfo.UserName
#Génération de mots de passe aléatoire
$Assembly = Add-Type -AssemblyName System.Web
[System.Web.Security.Membership]::GeneratePassword(8,3)
Aucun commentaire:
Enregistrer un commentaire