Powershell

einfach mal eine Sammlung von Codebespielen

Quick And Dirty

function OutputError([string]$errorMessage)
{
Write-Host $errorMessage -ForegroundColor Red
}

$err = Invoke-Expression "./install/sqlCEIPdisable.ps1"
if (!$err) {
# Not True, last operation failed
OutputError "Disable CEIP-Services not successfull."
return
}
Write-Host "Disable CEIP-Services successfull." -ForegroundColor Green

---------------------

 

 

 

NT-Accounts

Write-Host "Create NT-Accounts"

$admin = @("ACCOUNTNAME")
$serviceAccounts = @("SERVICENAME")

$PlainPassword = @("PASWORD")
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force

#DE 1031
#EN 1033
$CultureID = (Get-Culture).LCID

Write-Host $CultureID

if ($CultureID -eq 1033)
{
Write-Host EN
#Admin-Accounts
for ($i=0; $i -lt $admin.length; $i++){
$rawUserName = $admin[$i]
#Benutzer erstellen
Write-Host $rawUserName
New-LocalUser -Name $rawUserName -Password $SecurePassword -FullName $rawUserName -Description "AdminAccount"
Set-LocalUser -Name $rawUserName -PasswordNeverExpires 1
#Gruppe setzen
Add-LocalGroupMember -Member $rawUserName -Name Users
Add-LocalGroupMember -Member $rawUserName -Name Administrators
}

#ServiceAccounts
for ($i=0; $i -lt $serviceAccounts.length; $i++){
$rawUserName = $serviceAccounts[$i]
#Benutzer erstellen
Write-Host $rawUserName
New-LocalUser -Name $rawUserName -Password $SecurePassword -FullName $rawUserName -Description "ServiceAccount"
Set-LocalUser -Name $rawUserName -PasswordNeverExpires 1
#Gruppe setzen
Add-LocalGroupMember -Member $rawUserName -Name Users
Add-LocalGroupMember -Member $rawUserName -Name Administrators
}
}
else
{
Write-Host DE
#Admin-Accounts
for ($i=0; $i -lt $admin.length; $i++){
$rawUserName = $admin[$i]
#Benutzer erstellen
Write-Host $rawUserName
New-LocalUser -Name $rawUserName -Password $SecurePassword -FullName $rawUserName -Description "AdminAccount"
Set-LocalUser -Name $rawUserName -PasswordNeverExpires 1
#Gruppe setzen
Add-LocalGroupMember -Member $rawUserName -Name Benutzer
Add-LocalGroupMember -Member $rawUserName -Name Administratoren
}

#ServiceAccounts
for ($i=0; $i -lt $serviceAccounts.length; $i++){
$rawUserName = $serviceAccounts[$i]
#Benutzer erstellen
Write-Host $rawUserName
New-LocalUser -Name $rawUserName -Password $SecurePassword -FullName $rawUserName -Description "ServiceAccount"
Set-LocalUser -Name $rawUserName -PasswordNeverExpires 1
#Gruppe setzen
Add-LocalGroupMember -Member $rawUserName -Name Benutzer
Add-LocalGroupMember -Member $rawUserName -Name Administratoren
}
}

Choice1

 

 

function OutputError([string]$errorMessage)
{
Write-Host $errorMessage -ForegroundColor Red
Read-Host 'Es ist ein Fehler aufgetreten.'
}

$title = 'something'
$question = 'Are you sure you want to proceed?'
$choices = '&Yes', '&No'

#$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
$decision = $Host.UI.PromptForChoice('something','Are you sure you want to proceed?',$choices, 1)
if ($decision -eq 0) {
Write-Host 'confirmed'
} else {
Write-Host 'cancelled'
}


$Title = "Title"
$Info = "Pick Something!"
$options = echo Option1 Option2 Option3
$defaultchoice = 2
$selected = $host.UI.PromptForChoice($Title , $Info , $Options, $defaultchoice)
$options[$selected]

$Parent = Read-Host -prompt "Enter full parent path that will contain the new folder"

if ( ($Parent -eq $null) -or ($Parent -eq "") -or ($Parent -eq " ")) { Write-Host "You entered a blank value: This Script is now Exiting." }
else { Write-Host "You Entered $Parent" }

Choice 2


param(
[String] $userName,
[String] $passWord
)


$title = 'something'
$question = 'Are you sure you want to proceed?'
$choices = '&Yes', '&No'

$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 0) {
Write-Host 'confirmed'
} else {
Write-Host 'cancelled'
}

function GetStringValue([String]$title)
{
Write-Host $title
$inputString = Read-Host -prompt " -> Ohne Eingabe wird das Script abgebrochen!"
if ( ($inputString -eq $null) -or ($inputString -eq "") -or ($inputString -eq " ")) { return "" }
else { return $inputString }
}

function EnsureStringValueOrAbort([String]$ensureValue, [String]$title )
{
if ( -not $ensureValue ) {
Write-Host $title
$ensureValue = Read-Host -prompt " -> Ohne Eingabe wird das Script abgebrochen!"
if ( ($ensureValue -eq $null) -or ($ensureValue -eq "") -or ($ensureValue -eq " ")) {
Write-Host "cancelled"
exit 1
}
else { return $ensureValue }
}
}

function EnsureStringValueOrDefault([String]$ensureValue, [String]$defaultValue, [String]$title)
{
if ( -not $ensureValue ) {
Write-Host $title
$ensureValue = Read-Host -prompt " -> Ohne Eingabe wird der Defaultwert verwenden ($defaultValue)!"
if (($ensureValue -eq $null) -or ($ensureValue -eq "") -or ($ensureValue -eq " ")) { return $defaultValue }
else { return $ensureValue }
if ( -not $ensureValue ) {
Write-Host "cancelled"
exit 1}# Kein Wert also doch abbrechen
}
}


$passWord = EnsureStringValueOrAbort $passWord "Bitte geben Sie ein Passwort an."
Write-Host $passWord

$userName = EnsureStringValueOrDefault $userName "sa" "Bitte geben Sie einen Benutzername an."
Write-Host $userName

InputSample


param(
[Parameter(Mandatory=$true, Position=0)] [String] $userName,
[Parameter(Mandatory=$true, Position=1)] [String] $passWord
)

exit

function GetStringValue([String]$title)
{
Write-Host $title
$inputString = Read-Host -prompt " -> Ohne Eingabe wird das Script abgebrochen!"
if ( ($inputString -eq $null) -or ($inputString -eq "") -or ($inputString -eq " ")) { return "" }
else { return $inputString }
}

function EnsureStringValueOrAbort([String]$ensureValue, [String]$title )
{
if ( -not $ensureValue ) {
Write-Host $title
$ensureValue = Read-Host -prompt " -> Ohne Eingabe wird das Script abgebrochen!"
if ( ($ensureValue -eq $null) -or ($ensureValue -eq "") -or ($ensureValue -eq " ")) {
Write-Host "cancelled"
exit 1
}
else { return $ensureValue }
}
}

function EnsureStringValueOrDefault
{
Param
(
[Parameter(Mandatory=$true, Position=0)]
[string] $EnsureValue,
[Parameter(Mandatory=$true, Position=1)]
[string] $DefaultValue,
[Parameter(Mandatory=$true, Position=2)]
[string] $Title
)
Write-Host "`$EnsureValue value: $EnsureValue -> `$ID DefaultValue: $DefaultValue -> `$Title value: $Title"
}

function Get-Something
{
Param
(
[Parameter(Mandatory=$true, Position=0)]
[string] $Name,
[Parameter(Mandatory=$true, Position=1)]
[int] $Id
)
Write-Host "`$Name value: $Name -> `$ID value: $Id"

}

Get-Something -Id 34 -Name "Blah1"
Get-Something "Blah" 345


Function Test([string]$arg1, [string]$arg2)
{
Write-Host "`$arg1 value: $arg1"
Write-Host "`$arg2 value: $arg2"
return "Hello"
}

$x = Test "ABC" "DEF"
Write-Host $x

Write-Host "before EnsureStringValueOrDefault"
$passWord = EnsureStringValueOrDefault "nunun" "hallo" "Bitte geben Sie ein Passwort an."
Write-Host "after EnsureStringValueOrDefault"
Write-Host $userName

exit
Write-Host "before"
$userName = EnsureStringValueOrAbort($userName, "Bitte geben Sie einen Benutzername an.")
Write-Host "after"
Write-Host $userName

Folder

#Erstellt Unterordner im aktuellen Verzeichnis
param(
[String] $folderName
)
$exitCode = ":q"

if ( -not $folderName ) {
Write-Host "Geben sie den Verzeichnisnamen an."
while ( -not $folderName ) {
$folderName = Read-Host "Verzeichnis? ($exitCode = Exit)"
}
}
else
{
Write-Host Parameter: $folderName
return 1
}
if ($folderName -eq $exitCode){return -1}

$currentfolder = Get-Location
#Write-Host $currentfolder
$PATH = "$currentfolder\$folderName"
if (!(Test-Path $PATH)) {New-Item -Path $PATH -ItemType Directory}

--------------------------------------------------

Join-Path -Path "path" -ChildPath "childpath"
path\childpath

[IO.Path]::Combine('C:\', 'Foo', 'Bar')

-------------------------------------------------

Test-Path

if(![System.IO.File]::Exists($path)){
# file with path $path doesn't exist
}

WARNUNG: Es kann kein Download von URI

Lösung

Eine funktionierende Internetverbindung vorausgesetzt, liegt es vermutlich an dem „Upgrade“ des Azureedges, der den Lookup-Provider stellt (onegetcdn.azureedge.net/providers). Der Endpunkt lässt seit etwa April 2020 keine TLS1.0 Verbindungen mehr zu und wurde auf „TLS1.2 min“ konfiguriert. Die PowerShell (<14393.3474) spricht per Default aber nur TLS1.1.

Dieser PS-Befehl stellt die PowerShell ebenfalls auf 1.2 um:

[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12