Powershell
Enable Powershell
powershell \"set-executionpolicy bypass -force\"
powershell \"Enable-PSremoting -Force\"
Scripts
Enable RemoteSigned scripts
Set-ExecutionPolicy RemoteSigned
Or regedit
to HKLM\\\\SOFTWARE\\\\Microsoft\\\\PowerShell\\\\1\\\\ShellIds\\\\Microsoft.PowerShell
, create ExecutionPolicy
as REG_SZ
with RemoteSigned
.
Homemade script without signature
Set-ExecutionPolicy Unrestricted
Loop
ForEach ($user in $users) {
...
}
Output
Console output
Write-Host --NoNewLine
Write-Ouput
Specific level output (Debug, Information, Warning, ...)
Write-Information ($user.GivenName + " " + $user.Surname + " = " + $user.UserPrincipalName + " = " + $DC2eMail)
For those levels to be printed, each one need an environment variable to be set. And set as silently not to be printed. And there are other options, -Stop
, -Suspend
$DebugPreference = "Continue"
$DebugPreference = "SilentlyContinue"
CSV Output
New-Object -TypeName PSCustomObject -Property @{
Email1 = $user.UserPrincipalName
Email2 = $DC2eMail
} | Export-Csv -Append -NoTypeInformation -Path $OutputFilePath -Delimiter ';'
More about an object
Getting all user field
Get-ADUser -Filter *| Get-Member
Uninstall software
Here's how to list all installed software
If(!([Diagnostics.Process]::GetCurrentProcess(). Path -match '\\syswow64\\')) {
$uninstallPath = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
$uninstallWow6432Path = "\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"
@(
if (Test-Path "HKLM:$uninstallWow6432Path" ) { Get-ChildItem "HKLM:$uninstallWow6432Path"}
if (Test-Path "HKLM:$uninstallPath" ) { Get-ChildItem "HKLM:$uninstallPath" }
if (Test-Path "HKCU:$uninstallWow6432Path") { Get-ChildItem "HKCU:$uninstallWow6432Path"}
if (Test-Path "HKCU:$uninstallPath" ) { Get-ChildItem "HKCU:$uninstallPath" }
) | ForEach-Object { Get-ItemProperty $_.PSPath } | Where-Object { $_.DisplayName -and !$_.SystemComponent -and !$_.ReleaseType -and !$_.ParentKeyName -and ($_.UninstallString -or $_.NoRemove) } | Sort-Object DisplayName | Select-Object DisplayName
} else {
Write-Host -ForegroundColor Red "You are running 32-bit Powershell on 64-bit system. Please run 64-bit Powershell instead."
}
To search for a specific software, filter this list etc, update the Where-Object
with something like Where-Object { $_.DisplayName -like "cloud" }
Win32_Product
kind can be remove adding | ForEach-Object { $_.Uninstall()}
Get-WmiObject -Class Win32_Product -Filter "Name like '%Microsoft System Center Virtual Machine Manager DHCP Server (x64)%'" | ForEach-Object { $_.Uninstall()}