Willkommen bei Tinus IT Wiki

Agile Windows Operating, Automation on Windows with PowerShell, DevOps or EngOps?

JSON mit JavaScript

Ein Postman Request gibt normalerweise einen JSON-String zurück. Ein JSON-String besteht aus einem oder mehreren Objekten und Arrays. Die geschweiften Klammern “{}” enthalten ein Objekt, während die eckigen Klammern “[]” ein Array enthalten. Aus diesem Object können die einzelnen Properties mittels Schleifen abgefragt werden.

PSConfEU 2023

Die PowerShell Conference Europe 2023 in Prag. Ich konnte wieder viel von meinen weltweiten Community Members und ihren Tools und Techniken und ihrem Mindset lernen: PowerShell TUIs, DevOps & From PowerCLI to REST API, Windows Terminal, PowerShell in Vim u.v.m.

SQLiteDB

SQLite ist eine Datenbank-Management-Lösung in einer C-Programmierbibliothek. Jeff Hicks hat dazu ein PowerShell-Module auf der PowerShell Gallery veröffentlicht und das schaue ich mir jetzt an.

RestAPI mit PowerShell

In diesem Beispiel zeige ich euch, wie man mit PowerShell ein RestAPI schreibt. Doch was ist eigentlich ein API?

GitHub Actions

GitHub Actions sind (in GitLab Pipelines) Worklflows mit denen verschiedene Jobs und Steps abgearbeitet werden können. Als erstes wird ein Container mit dem gewünschten OS erstellt in dem der Workflow abgearbeitet wird. Ist dieser beendet, so wird der Container wieder gelöscht. Als OS steht Linux, Windows und Mac OS zur Verfügung.

Disable Session Restore

Beim Starten von VS Code werden automatisch die Sessions von den letzten Benutzungen wiederhergestellt. In diesem Beitrag zeige ich, wie dieses Feature ausgeschaltet werden kann.

WebApps mit PowerShell Teil 2

Ein SSL Zertifikat auf den Pode Server anwenden und die Website mit https aufrufen oder CRUD Operations mit MongoDB in einem Workflow durchspielen. Mit WinRM Daten aus dem Eventlog eines remote Computer auslesen und in einer Tabelle anzeigen.

WebApps mit PowerShell Teil 1

Eine WebApp mit PowerShell programmieren, kann man das? Ja klar, das geht mit den PowerShell Modulen Pode und Pode.Web von Matthew Kelly alias Badgerati.

Telegram

Mit Telegram kann mit Invoke-WebRequest Messages an einen Channel versendet werden wie mit Discord.

Invoke-VMScript

Mit PowerCLI Invoke-VMScript kann ein Command oder ein Script auf einer VM ausgeführt und das Resultat zurück gegeben werden.

MysqlDB

Auf pythonanywhere.com können Daten in MySQL gespeichert werden. In diesem Beitrag erstelle ich eine Test DB auf Docker mit MySQL, damit ich mein Python-Script lokal testen kann bevor ich es auf pythonanywhere.com einsetzte.

Python datetime

Das Mysterium Python datetime. Was mir in PowerShell simple erscheint, ist mir in Python immer noch nicht ganz klar – convert string to datetime und umgekehrt, was wann wie und warum?

Discord

Discord ist ein eine kostenloser Messenger und ermöglicht, einfach über einen Desktop-Client, über den Internetbrowser oder über eine App mit Freunden zu chatten. Mit Discord kann ich über das Internet wie mit MS Teams entwickeln und z.B. WebHook Integrationen oder Bots entwickeln.

Testing – TDD

TESTEN … TESTEN … TESTEN … TESTEN. Testprozess definieren, Tests beschreiben, Tests automatisieren, Testresultate speichern, etc. Ich mache das an einem Beispiel mit Docker, MSSQL, Azure Data Studio mit Jupyper Notebook und Pester.

MongoDB

MongoDB die NoSQL OpenSource Datenbank. MongoDB kann auf einem Docker Container gehostet und mit Mongo Shell, MongoDB for VS Code Extension, Python oder PowerShell genutzt werden.

MssqlDB

MssqlDBs mussten früher mit sqlcmd oder SQL Server Management Objects (SMO) bearbeitet werden. Heute kann das viel einfacher mit den dbatools und VSCode gemacht werden.

Transact-SQL

In diesem Post zeige ich euch meine meist-genutzten TSQL-Statements. Diese Statements benutze ich in VSCode auf einem Linux SQL Docker Container.

Docker Teil 3

In diesem Beitrag zeige ich, wie man mit Docker Windows Container benutzen könnte und bevorzuge dann doch das MSSQL-Image auf Linux. Datenbank mit Tabelle erstellen und mit Daten abfüllen, Backup, Restore in Azure Data Studio werden zum Haupteil des Beitrages.

Docker Teil 2

In diesem Beitrag zeige ich, wie man mit Docker ein benutzerspezifisches Netzwerk erstellt und auf zwei Containern anwendet.

Docker Teil 1

In diesem Beitrag zeige ich, wie man mit Docker ein Image eines CentOS erstellt, einen Container startet und darin mit PowerShell auf Linux arbeiten kann.

Python on VS Code

Python auf Mac OS oder Windows installieren und in VS Code einbinden und Azure Data Studio mit Jupyter Notebook einrichten.

Run as

Eine PowerShell als Administrator starten.

Cronjob

Was bei Windows der Scheduled Task ist, ist bei Linux der Cronjob.

Test-ComputerSecureChannel

Mit PowerShell den Secure Channel zwischen einem Computers und seiner Domäne prüfen und reparieren.

Split and Join

Unregelmässige Texte mit vielen Leerzeichen zerlegen und in strukturierte Texte zusammensetzen.

Errorhandling

Es gibt zwei Arten von Errors, Terminating Errors und Non-Terminating Errors.

IP4 RouteTable Class

IP4 Route Table exportieren, löschen und importieren mit einer PowerShell Class.

MemberShip

User und seine Gruppenmitgliedschaft mit dem ADSI-Provider auflisten.

Netzwerkprofil ändern

Windows kennt drei verschiedene Netzwerkprofile. Es kommt vor, dass der Computer ein falsches Netzwerkprofil einstellt und somit die falschen Firewallsettings ziehen.

Web Server Class

Einen IIS Webserver mit PowerShell auf Windows Server installieren.

Network Class

Ich stehe oft vor der Herausforderung, dass ich nicht nur die IPAdresse, SubnetMask und DefaultGateway eines Server abfragen will, sondern auch noch das Hostsfile und die Routingtable und alles bitte schön als Object zurückgeben. Also mit PowerShell eine eigene Klasse schreiben mit welcher eben diese Eigenschaften ausgelesen werden können – PSNetConfig entsteht. Eine Klasse erstellen… weiterlesen »

Format string

.NET verfügt über eine Methode zur Formatierung von Zeichenketten, mit der Nummern formatiert werden können.

Remote-Session Copy

Mit PowerShell-Remoting muss nicht mehr über das Clipboard von einem Host zum anderen kopiert werden.

Copy-VMFile

Files vom physischen (HyperV) Host auf eine VM kopieren.

Software installieren

Software installieren/deinstallieren mit msiexec. Msiexec Optionen msiexec /Option [Optional Parameter] Install Options </package | /i> Installs or configures a product /a Administrative install – Installs a product on the network /j<u|m> [/t ] [/g ] Advertises a product – m to all users, u to current user </uninstall | /x> Uninstalls the product Display Options /quiet… weiterlesen »

Regex kurz erklärt

Regex Pattern Wichtige Regex Pattern: \d digit [0-9] \w alpha numeric [a-zA-Z0-9_] \s whitespace character . any character except newline () sub-expression \ escape the next character Cmdlets Get-Content Select-String Select-Object Split Replace Aus einem Logfile einen Wert exportieren Dazu benötigen wir ein Logfile und die Cmdlets Select-String und Select-Object mit ihren Parametern. $content =… weiterlesen »

Windows Update Service

Assembly Lädt eine Assembly aus dem Anwendungsverzeichnis oder dem globalen Assemblycache. [void][reflection.assembly]::LoadWithPartialName(“Microsoft.UpdateServices.Administration”) Microsoft.UpdateServices.Administration Namespace Downstreamserver auflisten $Upstreamserver = “$($env:COMPUTERNAME).$($env:USERDNSDOMAIN)” $ret = @() [void][reflection.assembly]::LoadWithPartialName(“Microsoft.UpdateServices.Administration”) $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($Upstreamserver,$false, 8530) $wsus.GetDownstreamServers() | %{ $obj = [PSCustomObject]@{ UpdateServer = $_.UpdateServer DownstreamServer = $_.FullDomainName LastSyncTime = $_.LastSyncTime ParentServerId = $_.ParentServerId SyncsFromDownstreamServer = $_.SyncsFromDownstreamServer LastRollupTime = $_.LastRollupTime Version = $_.Version IsReplica… weiterlesen »

Pagefile Konfiguration

Bei einer Default-Installation eines Windows OS ist das Pagefile immer auf AutomaticManagedPagefile eingestellt. Diese Konfiguration führt früher oder später zu einem Diskspace Problem auf der System Disk, da das Pagefile sich so viel Platz nimmt wie es kann. Mit folgendem Script kann die Pagefile Konfiguration, den letzten Memorydump, die Eventlogeinträge von den letzten paar System… weiterlesen »

SMB Versionen

Aktuell sind verschiedene Attacken mit Ransomware im Umlauf, welche die SMB Version 1 ausnutzen. SMB Versionen CIFS – The ancient version of SMB that was part of Microsoft Windows NT 4.0 in 1996. SMB1 supersedes this version. SMB 1.0 (or SMB1) – The version used in Windows 2000, Windows XP, Windows Server 2003 and Windows… weiterlesen »

Securitylog auswerten

Securitylog mit Regex auswerten Logon Events function CheckLogons{ [cmdletbinding()] Param($days) $ret = @() $Logname = ‘Security’ [DateTime]$now = Get-Date [DateTime]$after = $now.AddDays(-$days) [DateTime]$before = $now $events = Get-EventLog -LogName $Logname -InstanceId 4624,4625,4634 -After $after -Before $before foreach($event in $events) { $content = $event.message | Find-Matches -Pattern ‘account name:\s+\w+’ if($content.Count -eq 2){ $account = $content[1] } else{… weiterlesen »

Local Groups

Alle lokalen Gruppen mit den Mitgliedern auflisten und als Object mit einer Hashtable zurückgeben. WinNT-Provider Ohne das Windows Management Framework 5.1 musste mühsam über den WinNT-Provider oder mit dem Local Account Management Module aus der Technet Gallery auf die lokalen User und Gruppen zugegriffen werden. function CheckLocalAdmins{ <# Check the Membership in local Groups#> [cmdletbinding()]… weiterlesen »

PS-Remoting

PowerShell 2.0 or later WinRM WSMan-Protocol must have a listener configured, an inbound firewall rule for TCP port 5985/86 must be enabled, and the WinRM service must be started. winrm quickconfig Enabled on Windows Server 2012 Operating Systems or later. Disabled by default on all Client and earlier Server OS’s. Enable-PSRemoting -Force Trusted-Hosts Computers in… weiterlesen »

Windows Betrieb

Windows Betrieb, was gehört eigentlich dazu? 7×24 Stunden Support Incident-, Change- und Problem Management Incident – Eine Störung tritt ein, wenn ein bestehender Service nicht mehr ordnungsgemäss funktioniert. Eine Störung wird in einem Incident der Verantwortlichen Stelle gemeldet. In einem Störungsfall wird ein Workaround gesucht und implementiert, damit der Service wieder ordnungsgemäss funktioniert. Change –… weiterlesen »

Agile Windows Operations

Legacy Windows Betrieb Einzelene Server werden manuel durch den System Manager per RDP verbunden und auf dem Windows Server werden die gewünschten Arbeiten wie z.B. Windows Updates installieren durchgeführt. Am Schluss der Arbeiten ein Logoff und ab zum nächsten Server – und das auf 170 Servern? Nein danke! Agile Windows Betrieb 50 oder mehr Server… weiterlesen »

Planung mit Scrum

…Scrum macht die relative Wirksamkeit Ihres Produktmanagements und Entwicklungsvorgehens sichtbar, so dass Sie sich verbessern können… Wir wollen also aufzeigen, wo wir uns verbessern können. Agile Agile heisst das Zauberwort, doch das muss zuerst etabliert und auch gelebt werden. Was bedeutet Agile denn überhaupt? kurze Planungsphasen zügige und überprüfbare Teilergebnisse dauerhafte Priorisierung und Optimierung sofortiges… weiterlesen »

Traceroute in Object umwandeln

Routenverfolgung zerlegen und in ein Object ausgeben. Mein Provider hat Angst vor einem “?raceroute” – ergo ?racert heisst richtig wie? function Get-RouteResult { param($Name) $routeregex = ‘(?<Address>(?<=Tracing route to )(.*)(?=over))’ $TraceRouteTo = $Name -match $routeregex $ipadrregex = ‘\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b’ $IPAddresses = $Name | select-string -Pattern $ipadrregex -AllMatches | % {$_.Matches.Value} -ErrorAction SilentlyContinue if([string]::IsNullOrEmpty($IPAddresses)) { $TraceRouteTo =… weiterlesen »

MariaDB

MariaDB auf Linux installieren.

Icinga2

Mein Provider lässt etc nicht zu, also ersetze usw mit etc. Pre Requisites DNS Eintrag Icinga in hosts-file oder DNS hinzufügen. # sudo vim /usw/hosts # 127.0.0.1 icinga localhost localhost.localdomain localhost4 localhost4.localdomain4  Firewall Rule # firewall-cmd –state running # firewall-cmd –get-active-zones public # firewall-cmd –permanent –zone=public –add-service=http # firewall-cmd –permanent –zone=public –add-service=https # firewall-cmd –permanent… weiterlesen »

Remoting mit PSExec

PsExec v2.11 von sysinternals Verwendung Psexec [\\Computer[,Computer2[,…] | @Datei] [-u Benutzer [-p Kennwort]] [-n s] [-l] [-s|-e] [-x] [-i [Sitzung]] [-c [-f|-v]] [-w Verzeichnis] [-d] [-<Priorität>] [-a n,n,… ] [-accepteula] cmd [Argumente] Computer Weist PsExec an, die Anwendung auf den angegebenen Computern auszuführen. @Datei Weist PsExec an, den Befehl auf allen Computern auszuführen, die in… weiterlesen »

Substring im Excel

Ich suche immer wieder nach der Formel im Excel, um den Hostname vom FQDN zu extrahieren. Hier ist die Lösung für das deutsche Excel: FQDN Hostname server.domain.name =LINKS(A2;SUCHEN(“.”;A2)-1) Eine gute Seite mit Formeln habe ich hier gefunden.

Netzlaufwerke

Ab PowerShell 3.0 könnte ein Netzlaufwerk-Mapping in etwa so gemacht werden: function Map-Networkdrive { param( [ValidateSet(‘P’,’Q’,’R’,’S’,’T’,’U’,’V’,’W’,’X’,’Y’,’Z’)] [Parameter(Mandatory=$true)] [String] $Letter = ‘Z’, [Parameter(Mandatory=$true)] [String] $Descri = ‘Netzlaufwerk’, [Parameter(Mandatory=$true)] [String] $Share = ‘\\server\share’, [Parameter(Mandatory=$false)] [Switch] $credentials = $false ) $function = $($MyInvocation.MyCommand.Name) Write-Verbose $function -Verbose if(credentials) { $Creds = Get-Credential New-PSDrive -Name $Letter -Description $Descri -PSProvider FileSystem… weiterlesen »

Hashtable

Hashtable Ein einfaches Beispiel einer Hashtable anhand einer Folderabfrage auf einem Mac: Get-ChildItem -Path $home | %{ @{$_.Name=(Split-Path -Parent $_.Fullname)} } Name Value —- —– Applications /Users/xxx Desktop /Users/xxx Documents /Users/xxx Downloads /Users/xxx Movies /Users/xxx Music /Users/xxx Pictures /Users/xxx Public /Users/xxx Die Syntax ist @{Name=Value} @{$_.Name=(Split-Path -Parent $_.Fullname)} Hashtable mit Source- und Targetfolder Eine Hashtable… weiterlesen »

BGinfo

BGInfo.exe von Sysinternals starten und mit den gewünschten Daten konfigurieren. Konfigurationsfile Host Name:    <Host Name> Logon Domain: <Logon Domain> IP Address:    <IP Address> Subnet Mask:    <Subnet Mask> Default Gateway: <Default Gateway> DNS Server:     <DNS Server> CPU:    <CPU> Memory:    <Memory> OS Version:    <OS Version> Service Pack:   <Service Pack> Autostart einrichten Registry key erstellen $path =… weiterlesen »

XML Manipulationen

Read XML Data Daten aus einem XML-File auslesen und als Hashtable zurückgeben: function Get-XmlData{ <# Read XML data and return a hashtable #> [CmdletBinding()] param( $file, $xpath ) $ret = @() [xml]$xml = (Get-Content $file) $objxmldata = $xml.SelectNodes($xpath) #Load data to an xmlobject foreach($item in $objxmldata){ $ret += @{Date=”$($item.year)-$($item.month)-$($item.day)”} } return $ret } Get-XmlData -file… weiterlesen »

Clear Download

Temporäre Dateien aus dem Download löschen <# Remove all PDF-Files older than 4 days #> function Remove-PdfFiles{ param($path) $function = $($MyInvocation.MyCommand.Name) $days = (Get-Date).AddDays(-4) Get-ChildItem -Include *.pdf -Path $path -Recurse | Where-Object LastWriteTime -lt $days | % { Write-Verbose “$(get-date -f ‘yyyy-MM-dd HH:mm:ss’) $($function)” -Verbose “$(get-date -f ‘yyyy-MM-dd HH:mm:ss’) Remove-Item $($_.FullName)” | Out-File -FilePath $Logfullname… weiterlesen »

Chocolatey

Chocolatey Installation Invoke-Expression ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’)) choco search <String> choco list -lo Posh GIT Installation choco install poshgit -y choco uninstall poshgit -y choco upgrade poshgit

Collection to String

Immer wenn eine Collection in einen String umgewandelt werden soll… function Convert-CollectionToString { <# Convert System.Collections.Specialized.StringCollection to String #> param( [Parameter(Mandatory = $true)] $col ) $function = $($MyInvocation.MyCommand.Name) [String] $ret = $null try { if($psdebug) { Write-Verbose -Message “Running $($function) …” -Verbose } if($col -is [System.Collections.Specialized.StringCollection]) { foreach($item in $col) { $ret = “$($ret) $($item)”… weiterlesen »

Export- und Import-Clixml

Export-Clixml und Import-Clixml mit Credentials By default, the SecureString cmlets (ConvertFrom-SecureString and ConvertTo-SecureString) use Windows’ Data Protection API when they convert your SecureString to and from a plain text representation. The encryption key is based on your Windows logon credentials so only you can decrypt the data that you’ve encrypted. If you want the exported… weiterlesen »

VMware Snapshots

Mit PowerCLI auf die VIServer verbinden und Snapshots erstellen und löschen.

Yes or No Abfrage

Mit einer Regex-Auswertung auf Yes oder No abfragen: $ret = Read-Host ‘Would you create a file? [Y] Yes, [N] No’ if($ret -match ‘^y’) { Write-Output “Yes ($($ret))” } elseif($ret -match ‘^n’) { Write-Output “No ($($ret))” }

DNS Serveradresse ändern

DNS Serveradresse auf Interface mit bestimmter IP Adresse ändern. function Get-Interface{ <# Get-Interface with the given ipaddress in NameServer #> param( [Parameter(Mandatory=$true)][String]$ipaddress = ” ) $function = $($MyInvocation.MyCommand.Name) try { $key = ‘HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces’ Get-ChildItem -Path $key | % { $start = $_.Name.LastIndexOf(‘{‘) $interface = $_.Name.Substring($start) $nameserver = (Get-ItemProperty -Path “$key\$interface” -Name ‘NameServer’).NameServer if($nameserver -like $ipaddress){… weiterlesen »

CD-Rom ändern

CD-Rom auf anderen Laufwerksbuchstaben ändern. function Get-CDRomLetter{ $function = $($MyInvocation.MyCommand.Name) $ret = $null try { $ret = (gwmi Win32_cdromdrive).drive } catch [Exception] { write-host “$($function): $($_.Exception.Message)” -ForegroundColor Red $error.clear() } return $ret } function Set-CDRomLetter{ param( [Parameter(Mandatory=$true)][String]$newdrive=” ) $function = $($MyInvocation.MyCommand.Name) $ret = $null try { (gwmi Win32_cdromdrive).drive | %{ #Lists the mounted volume name… weiterlesen »

ValidateSet

If all you want is limiting choices, you can use a ValidateSet attribute instead. #requires -Version 2 function Select-City { param ( [ValidateSet(‘Bern’,’Zürich’,’Chur’,’Lugano’)] [Parameter(Mandatory=$true)][String]$City ) switch ($City) { ‘Bern’ {“The Gurten is in $City”} ‘Zürich’ {“The Uetliberg is in $City”} ‘Chur’ {“The Brambrüesch is in $City”} ‘Lugano’ {“The Monte San Salvatore is in $City”} }… weiterlesen »

VMware Diskspace

Mit PowerCLI auf die VIServer verbinden und den Diskspcae einer VM vergrössern ohne RDP-Login auf das Guest OS.

PowerShell starten

PowerShell von ausserhalb starten PowerShell.exe -NoExit -File C:\Scripts\Get-MemoryUsage.ps1 Script <# .SYNOPSIS Calculates the total memory usage .SYNTAX Get-MemoryUsage.ps1 -property ‘PrivateMemorySize64’ .PARAMETERS property One of the following propertes: NonpagedSystemMemorySize64 PagedMemorySize64 PagedSystemMemorySize64 PeakPagedMemorySize64 PeakWorkingSet64 PeakVirtualMemorySize64 PrivateMemorySize64 VirtualMemorySize64 WorkingSet64 .DESCRIPTION Calculates the total memory usage .REMARKS Do enything .NOTES Author: Martin Walther #> function Get-TotalMemoryUsage{ param( [Parameter(Mandatory=$true)][String]$property=” )… weiterlesen »

Windows Operating

Was ist eigentlich für den Windows Betrieb notwendig? Betrieb einer Plattform Ist eine Plattform einmal zu Ende entwickelt, wird diese dem Betrieb übergeben. Doch was muss so eine neue Plattform eigentlich erfüllen, um vom Betrieb übernommen zu werden? Das ist scheinbar eine Frage die sich niemand stellt – ist ja eh alles klar. Planung, Dokumentation… weiterlesen »

Memory Usage

Installiertes physical Memory ausgeben (Get-WmiObject -Class Win32_PhysicalMemory | ` Measure-Object -Property Capacity -Sum).Sum/1mb Aktuell benutztes Memory Ausgeben Get-Process | Select ProcessName,id,PrivateMemorySize64,WorkingSet64,PriorityClass,TotalProcessorTime,Product,Path | out-gridview oder gleich berechnen lassen $ret = Get-Process | Select ProcessName,id,PrivateMemorySize64,WorkingSet64 $ret | Sort-object PrivateMemorySize64 | Format-Table -AutoSize $ret = $ret | Measure-Object -Property PrivateMemorySize64 -Sum $procarray = “$([math]::Round(($ret).Sum/1mb,2))”,”$($ret.Count)” “-” * 80 “Total… weiterlesen »

Static Methods

String [string] | Get-Member -Static [string]::IsNullOrWhitespace($name) [string]::IsNullOrEmpty($name) Environment [System.Environment] | Get-Member -Static Convert [convert] | Get-Member -Static $decimal=’255′ [convert]::ToString($decimal,2) $binary=’11111111′ [Convert]::ToInt64($binary,2) Math [System.Math] | Get-Member -Static -MemberType Methods [System.Math]::Round($value,$digits) [System.Math]::Sqrt(9) = 3 [System.Math]::Pow(2,3) = 8 [System.Math]::Floor(3.3) = 3 [System.Math]::Floor(-3.3) = -4 [System.Math]::Ceiling(3.3) = 4 [System.Math]::Ceiling(-3.3) = -3 [System.Math]::Max(2,7) = 7 [System.Math]::Min(2,7) = 2 [System.Math]::Truncate(9.3) =… weiterlesen »

File/Folder umbenennen

Mehrere Files/Folder umbenennen Get-ChildItem | %{Rename-Item -Path $_.FullName -NewName “Prefix_$($_.Name)”} $searchstr = ‘old’ $replacestr = ‘new’ $entrydir = ‘Z:\06_Puppet\sciiswebadministration’ gci $entrydir -Recurse | Where Name -Like -Value $searchstr | % { $newname = $_.name.replace($searchstr, $replacestr) Rename-Item $_.fullname $newname } Ausdruck in mehrerern Files ersetzten $searchstr = ‘old’ $replacestr = ‘new’ $entrydir = ‘Z:\Temp’ gci $entrydir… weiterlesen »

Memory Usage eines Prozesses

Memory Usage eines Prozesses auflisten Mit folgenem Code kann z.B. abgefragt werden wie viel RAM die eigenen Tools benötigen, dazu werden die einzelnen Prozesse in ein Array geschrieben und in einer ForEach-Schleife abgearbeitet. $process = Read-Host ‘Enter the Process name to search’ # $process = @(‘sqlserver’) Get-Process | Where-Object -Property ProcessName -Like -Value $process |… weiterlesen »

Domain Trust

Trusted Domains auflisten Trusted Domains und DCs auflisten Trust verifizieren Port Requirements TCP Port Requirements for the Active Directory Domain Service: TCP Port AD and AD DS Usage Type of traffic 389 Directory, Replication, User and Computer Authentication, Group Policy, Trusts LDAP 636 Directory, Replication, User and Computer Authentication, Group Policy, Trusts LDAP SSL 3268… weiterlesen »

PSObject

PSObject versus PSCustomObject PowerShell Version 1.0 Spalten werden gemäss der Anordnung innerhalb der Schleife dargestellt. function GetInstaledSoftware{     <#         Get installed Software     #>     $function = $($MyInvocation.MyCommand.Name)     $ret = @()     try{         if($psdebug){write-verbose “Running $($function) …” -verbose}         Get-WmiObject -Class Win32_Product | %{             $obj = New-Object PSObject            … weiterlesen »

Domain- or Workgroup Member

Prüfen, ob der Computer Domain- oder Workgroup Member ist. Ab PowerShell Version 3.0 function GetDomainOrWorkgroup{ <# Check if the computer is domain- or workgroup member #> $function = $($MyInvocation.MyCommand.Name) try{ if($psdebug){write-verbose “Running $($function) …” -verbose} $objcomputer = (gwmi win32_computersystem) $DomainOrWorkgroupName = $null; $DomainOrWorkgroup = $null if (($objcomputer).partofdomain -eq $true) { $DomainOrWorkgroupName = $(($objcomputer).Domain) $DomainOrWorkgroup =… weiterlesen »

Devices

Devices auflisten, welche ein Problem haben function GetErrorDevices{ <# Get Devices with some problems Error codes = https://support.microsoft.com/en-us/kb/310123 Availability codes = https://msdn.microsoft.com/en-us/library/aa394353%28v=vs.85%29.aspx #> $function = $($MyInvocation.MyCommand.Name) try{ if($psdebug){write-verbose “Running $($function) …” -verbose} Get-WmiObject Win32_PNPEntity | Where-Object{$_.ConfigManagerErrorCode -ne 0} | %{ #region Error code matrix switch ($_.ConfigManagerErrorCode){ 1 {$errorcode = “This device is not configured correctly.”}… weiterlesen »

E-Mail versenden

E-Mail per PowerShell versenden #region SendMail $MailServer = “mailrelay.company.ch” $MailFrom = “postmaster@company.ch” $MailTo = “support@company.ch” $Subject = “Testmessage” $Body = “Hello Support`n`n” $Body += “This is a test message for you.`n`n” $Body += “Kind regards`n`n” $Body += “Postmaster” $FullFileName = “C:\Company\Output\Report.htm” Send-MailMessage -From $MailFrom -To $MailTo -Subject $Subject ` -Body $Body -SmtpServer $MailServer -Attachments $FullFileName… weiterlesen »

Windows Update

Installierte Hotfixes mit PowerShell auflisten Ab PowerShell Version 2.0 function GetHotFixes{ <# List all installed hotfies #> $function = $($MyInvocation.MyCommand.Name) $ret = @() try{ get-hotfix | Selece HotFixID,Description,InstalledBy,InstalledOn | %{ $obj = New-Object PSObject Add-Member -InputObject $obj -MemberType NoteProperty -Name HotFixID -Value $_.HotFixID Add-Member -InputObject $obj -MemberType NoteProperty -Name Description -Value $_.Description Add-Member -InputObject $obj… weiterlesen »

Software auflisten

Alle installierte Software auflisten Ab PowerShell Version 2.0 function Get-InstaledSoftware{ [CmdletBinding()] param($param1) $function = $($MyInvocation.MyCommand.Name) $ret = @() Get-WmiObject -Class Win32_Product -ErrorAction SilentlyContinue | Where-Object {-not([string]::IsNullOrEmpty($_.Name))} | %{ $obj = New-Object PSObject $obj | Add-Member NoteProperty Name $_.Name $obj | Add-Member NoteProperty Description $_.Description $obj | Add-Member NoteProperty InstallDate $([DateTime]::ParseExact($_.InstallDate,’yyyyMMdd’,$null)) $obj | Add-Member NoteProperty Version… weiterlesen »

Neues in Windows 2016

Was gibt es Neues in Windows Server 2016 Windows Server Containers statt Docker. Production Checkpoints für virtuelle Server. Nano Server Installation. Unterstützt nur Hyper-V, Clustering und .Net-Support. Kein GUI, keine Management Consolen, keine lokale Anmeldung möglich. Die Wiederkehr des Startmenüs. Start, Herunterfahren gibts wieder. PowerShell Version 5.0. und vieles mehr im Technet Identity and Access… weiterlesen »

Pagefile

Virtual Memory abfragen Die Grössenangaben sind alle in Megabytes zu verstehen. Get-WmiObject -Class Win32_PageFileUsage | ` Select Name,AllocatedBaseSize,CurrentUsage,Peakusage,TempPageFile | Format-List Oder formatiert: Get-WmiObject -Class Win32_PageFileUsage | ` Select @{Name=”Pagefile”;Expression=”Name”},` @{Name=”Allocated(MB)”;Expression=”AllocatedBaseSize”},` @{Name=”Current(MB)”;Expression=”CurrentUsage”},` @{Name=”Peak(MB)”;Expression=”Peakusage”},TempPageFile | ft -AutoSize Virtual Memory verwalten If you have more than one physical disk, moving the page file to a fast drive that… weiterlesen »

Eventlog lesen

Eventlogs mit PowerShell 5.0 auslesen Eventlog Einträge zwischen zwei Datums-/Zeitangaben auslesen Mit folgendem Command kann nach Events innerhalb einer definierten Zeitspanne in den Eventlogs Application und System gesucht werden: $LogName = ‘Application’, ‘System’ [DateTime]$StartTime = ‘07.02.2015 14:30:00’ [DateTime]$EndTime = ‘07.02.2015 15:05:00’ Get-WinEvent -FilterHashtable @{ Logname=$LogName StartTime=$StartTime EndTime=$EndTime } | ft -Property LogName,TimeCreated,Id,LevelDisplayName,Message -Auto Unexpected Shutdown… weiterlesen »

ITIL Prozesse

Incident Ein Incident ist eine einmalige Störung die Nutzer am Arbeiten behindern oder verhindern Im Falle eines Incidents wird ein Workaround gesucht, damit die Nutzer wieder arbeiten können Problem Ein Problem ist eine wiederkehrende Störung. Diese wird analysiert und eine nachhaltige Lösung gesucht Change Eine geplante Änderung am System Capacity Reporting von Diskspace, CPU, RAM,… weiterlesen »

Robocopy

Standard Robocopy Anzahl Files, Directories, Bytes anzeigen $srcdir = “” $dstdir = “” robocopy $($srcdir) $($dstdir) /E /R:0 /W:0 /NJH /NP /NFL /NDL /L Standard Ausgabe Total Copied Skipped Mismatch FAILED Extras Dirs : 2 1 1 0 0 50 Files : 26 26 0 0 0 28 Bytes : 173.11 m 173.11 m 0… weiterlesen »

Memory Leak SharePoint Search

Pagefilegrösse Die Grösse der Auslagerungsdatei sollte die Grösse des physikalischen RAMs überschreiten. Ansonsten können folgende Fehler im Betrieb auftreten: LogName Id LevelDisplayName Message Application 1000 Error Faulting application name: NodeRunner.exe, version: 15.0.4490.1000, time stamp: 0x5108b158… System 26 Information Application popup: noderunner.exe- Application Error : The instruction at 0xe07a3b34 referenced memory at 0x00000000. The memory could… weiterlesen »

Transcript

Ausgabe mit Transcript in ein Logfile abspeichern. Transcript starten Try {Stop-Transcript}catch{} Start-Transcript -Path “C:\Scripts\Transcript.log” Transcript stoppen Nicht vergessen die Aufzeichnung nach Gebrauch zu stoppen. Stop-Transcript Fazit Die Formatierung lässt noch zu wünschen übrig. Ansonsten finde ich diese Funktion sehr hilfreich.

SharePoint Content Database

SQL Queries SQL Queries for SharePoint Content Database Move site collection Move site collections between databases in SharePoint 2013 Neue Datenbank an SharePoint anhängen (Add a content database, Datenbank darf nicht bestehen) In der SharePoint 2013 Management Shell Site Collection verschieben $SiteCollection = <http://ServerName/Sites/SiteName> $DestinationDB = <Destination Content Database> Move-SPSite $SiteCollection -DestinationDatabase $DestinationDB IIS restarten… weiterlesen »

SharePoint Troubleshooting

Logfiles Die Logs können mit dem Microsoft ULS Viewer analysiert werden. SharePoint .\Microsoft Office Servers\15.0\Logs IIS Siehe IIS Manager, Server, IIS, Logging, Log File, Directory.  

SQL Server Express

Prerequisites Damit das SQL Server Management Studio installiert werden kann, wird das Windows Feature .Net Framerwork 3.0 benötigt. SQL Server Express 2014 Microsoft SQL Server 2014 Express herunterladen Dabei müssen folgende Prodiukte aktiviert werden: ExpressAndTools 64BIT\SQLEXPRWT_x64_ENU.exe SQL Server Installation SQLEXPRWT_x64_ENU.exe als Admin ausführen und entpacken lassen, Installation startet automatisch Im SQL Server Installation Center “New… weiterlesen »

ASP .NET

AspNet funktioniert nur wenn .NET Environment 3.5 (WAS-NET-Environment) installiert ist. WAS-NET-Environment installieren Dism /online /enable-feature /featurename:WAS-NetFxEnvironment /All /Source:D:\sources\sxs /LimitAccess

PowerShell-Version

PowerShell-Version Es ist immer wieder wichtig, zu wissen welche PowerShell- und .Net Framework Version auf dem Computer installiert ist. Diese kann man einfach mit folgendem Befehl auslesen: “PowerShell Version:`t$($PSVersionTable.PSVersion)` .Net Framework Version:`t$($PSVersionTable.CLRVersion)” OS-Versionen ↔ PowerShell Versionen Ab PowerShell 3.0 wird Windows Management Instrumentation 3.0 (WMI) benötigt. Windows Version PowerShell WMF¹ .NET² Hinweis Windows Server 2003  –  –… weiterlesen »

Cloud-Services

Cloud-Modelle Allgemeine Definitionen der Cloud-Modelle Image Source: blogs.technet.com On-Premise On-Premises ist ein Nutzungsmodell für serverbasierte Computerprogramme (Software). Dabei erwirbt der Nutzer ein solches Computerprogramm und betreibt dieses im eigenen Rechnenzentrum, also auf eigener oder eigenverwalteter Hardware. IaaS – Infrastructure as a Service Dieses Modell stellt grundlegende IT-Ressourcen wie Rechenleistung, Storage oder Netzwerkkapazitäten zur Verfügung. Der… weiterlesen »

Scheduled Tasks

Scheduled Task abfragen Get-ScheduledTask -TaskName ‘My Task’ | Format-List * Mit schtasks.exe können z. B. alle Tasks eines Servers abgefragt werden. Meistens möchte man aber nur das Resultat eines einzigen Tasks wissen. Das geht über PowerShell folgenderweise: schtasks /query /s $server | select-string -pattern $taskname Zurückgegeben wird der TaskName, Next Run Time und der Status…. weiterlesen »

Lifecycel

Lifecycel, das ewige Thema in der IT Grundsätzlich entscheidet der Hersteller, wie der Lifecycel seiner Produkte ist. Hersteller Lifecycel Beispiel Microsoft Windows Lifecycel Provider Lifecycel Nun ist der Provider für seinen Kunden quasi der Hersteller, da er dem Kunden gegenüber sein eigenes Produkt/Service (z. B. Workplace: bestehend aus Netzwerk, AD, Filer, Messageing, etc.) anbietet und… weiterlesen »

Last Logon

Immer wieder kommt die Frage “wie kann ich die letzte Anmeldung eines Users im AD feststellen”? Es gibt zwei Attribute dafür; das LastLogon und das LastLogonTimeStamp. LastLogon Das LastLogon Attribut wird auf dem jeweiligen Logon Server (DC) eingetragen und nicht im Active Directory repliziert. LastLogonTimestamp Betrifft Windows Server 2003 functional level und höher. Das LastLogonTimestamp… weiterlesen »

Neues in Windows 2012

Was gibt es Neues in Windows Server 2012 R2? KDC SID Resource Compression → kann Probleme mit NetApp-Filern und Webapplikationen geben SMB Secure Negotiate feature → kann Probleme mit NetApp-Filern und Windows 8 Clients geben und vieles mehr im Technet

Troubleshooting Authentication

Betrifft Windows Server 2012 R2 Domain Controller und Windows 8.1 mit NAS (NetApp-Filer). Symptom Zugriff auf mit Namen verbundenes Netzlaufwerk (\\<Filer>\<Share>) gibt Access denied zurück (Kerberos Authentication) Zugriff auf mit IP Adresse verbundenes Netzlaufwerk (\\10.20.30.40\<Share>) funktioniert fehlerfrei (Fallback NTLM Authentication) Problem Kerberos is used to authenticate the user’s session to the NAS device The kerberos ticket… weiterlesen »

Troubleshooting SMB

Betrifft Windows Server 2012 R2 Domain Controller und Windows 8.1 mit NetApp-Filer. SMB Versionen Windows Server 2012 R2 -> SMB 3.2 Windows Server 2012 -> SMB 3.0 Windows Server 2008 R2 -> SMB 2.1 Windows Server 2008 -> SMB 2.0 Windows Server 2000 -> SMB 1.0 Windows NT 4.0 -> CIFS SMB Version auflisten Ab… weiterlesen »

Windows Server Core

Benutzer abfragen Listet den Benutzer auf. net user <username> Passwort eines Benutzers ändern Password eines Benutzers ändern mit Abfrage nach dem Passwort (*”). net user <username> *” Installierte Software abfragen Installierte Software auf Server Core oder auch auf Remote Computern können mit WMI abgefragt und aufgelistet werden. $computer = read-host (‘Enter Computer name’) Get-WmiObject -Class… weiterlesen »

Lingering Objects

Wie kann man Lingering Objects (veraltete Objekte) entdecken und entfernen? Dsquery Konflikt-Objekte anzeigen lassen dsquery * forestroot -gc -attr distinguishedname -scope subtree ` -filter “(name=*\0ACNF:*)” -limit 500 Repadmin GUID eines DCs herausfinden Um die GUID eines DCs herauszufinden, kann man z.B. den Befehl REPADMIN /Showrepl <DC-Name> eingeben. Veraltete Objekte entfernen REPADMIN /removelingeringobjects <DNS-Name des “veralteten”… weiterlesen »

Desired State Configuration (DSC)

DSC ist eine Plattform in PowerShell, mit der Configuration as Code angewendet werden kann wie mit Puppet, Chef oder ähnlichen Tools in der Linux Umwelt.

Domain Admins

Alle Domain Admins einer Domain auflisten $domainDnsName = read-host “Enter the DNS Domain Name to connect to” $accountName = ‘Domain Admins’ $searcher = New-Object DirectoryServices.DirectorySearcher $searcher.Filter = “(sAMAccountName=$accountName)” $searcher.SearchRoot = “LDAP://$domainDnsName” $searcher.PageSize = 100 $ret = $searcher.FindOne() #LDAP-Path to the ‘Domain Admins’ $members = $ret.GetDirectoryEntry().Member $members | %{ #Bind to the User-Object and return the… weiterlesen »

FRS zu DFRS migrieren

Voraussetzungen Domain Functional Level muss mindestens Windows Server 2008 sein. Global States 0 Start (Nur FRS) 1 Prepared (FRS und DFSR) 2 Redirected (DFRS und FRS) 3 Eliminated (nur DFRS) Aktuellen Status überprüfen: dfsrmig /getglobalstate Vorgehen Auf allen DCs net share eingeben und prüfen, ob der NETLOGON sowie der SYSVOL auf SYSVOL freigegeben sind. Auf… weiterlesen »

DHCP Server abfragen

DHCP Server Version $dhcpserver = (read-host ‘Enter Server name’) Get-DhcpServerVersion -ComputerName $dhcpserver DHCP Server Audit Log $dhcpserver = (read-host ‘Enter Server name’) Get-DhcpServerAuditLog -ComputerName $dhcpserver | ft -auto DHCP Server Failoverkonfiguration $dhcpserver = (read-host ‘Enter Server name’) Get-DhcpServerv4Failover -ComputerName $dhcpserver | ft -auto DHCP Server Scopes $dhcpserver = (read-host ‘Enter Server name’) Get-DhcpServerv4Scope -ComputerName $dhcpserver… weiterlesen »

Active Directory prüfen

Wenn ein DC promoted wurde, sollte dieser überprüft werden. Datenbank und Log SYSVOL-Folder anzeigen Im SYSVOL werden die Policies und Scripts domain-wide abgelegt. ls (get-wmiobject -class win32_share -computer . | ` where-object {$_.Name -eq ‘SYSVOL’}).Path | ` select Name, FullName, Length, LastWriteTime, CreationTime | ft -auto Inhalt vom Folder NTDS auflisten ntds.dit ist die Active… weiterlesen »

Active Directory Recycle Bin

Ab Forest Functional Level 2008 R2 kann der AD Recycle Bin aktiviert und genutzt werden. Die Aktivierung sollte auf dem Domain Naming Master als Enterprise Admin durchgeführt werden. Status abfragen Get-ADOptionalFeature ‘Recycle Bin Feature’ Aktivieren $domaindns = (Get-ADDomain | Select DNSRoot).DNSRoot $configurationNC = ([adsi]”LDAP://rootdse”).ConfigurationNamingContext $dirServices = “CN=Directory Service,CN=Windows NT,CN=Services,$($configurationNC)” $recycleBin = “CN=Recycle Bin Feature,CN=Optional Features,$($dirServices)”… weiterlesen »

DHCP Scopes

Scope erstellen $name = ‘Lab 1’ $start = ‘10.10.10.1’ $end = ‘10.10.10.254’ $subnet = ‘255.255.255.0’ Add-DhcpServerv4Scope -Name $name -StartRange $start -EndRange $end -SubnetMask $subnet Scope Exportbeispiel netsh dhcp server “\\$($dhcpserver)” v4 export “c:\$($dhcpserver)-scopes.txt” all Wird im nachfolgenden Beispiel kein Scope angegeben, so werden alle Scopes exportiert. $dhcpserver = (read-host ‘Enter Server name’) $scope = @(‘10.10.10.0′,’20.20.20.0’)… weiterlesen »

DHCP Server

DHCP Server Authorisierung Im Active Directory autorisierte DHCP Server auflisten $configurationNC = ([adsi]”LDAP://rootdse”).ConfigurationNamingContext Get-ADObject -SearchBase $($configurationNC) -Filter “objectclass -eq ‘dhcpclass’ ` -AND Name -ne ‘dhcproot'” | Select Name Add Server to Authorized servers netsh dhcp add server dhcpsrv1.example.microsoft.com 10.2.2.2 Windows PowerShell 4.0 Wird das Cmdlet ohne Parameter ausgeführt, so wird der lokale Server im AD… weiterlesen »

Windows Firewall

Windows Server 2008 and above The Windows Firewall service (MpsSvc) and its supporting driver must be running to provide the core firewall functionality and to manage the firewall and connection security rules that define how the firewall operates. When appropriate auditing events are enabled, Windows reports successes and failures in starting the required software components, or… weiterlesen »

Verzweigungen

Mit Verzweigungen entscheiden, was als nächstes abgearbeitet werden soll. if (){}else{} if (){}elseif{}else{} switch (){ 1 {} 2 {} 3 {} default {} }

SharePoint Service Applications

Service Applications erstellen Service Applications von allen installierten Services der Farm auswählen: $Global:SaSearchService = $false #Search Service and Web Analytics Service Application $Global:SaManagedMetadata = $true #Term Store $Global:SaUserProfile = $false #Social computing features use this information to enable productive interactions so that users can collaborate efficiently. $Global:SaStateService = $true #State Service is required by InfoPath… weiterlesen »

Schleifen

for-Schleife for ($i = 0; $i -lt 100; $i++){ write-host $i } while-Schleife while ($i -le 5) { Write-Host $i; $i++ } do-while-Schleife do { Write-Host $i; $i++ } while ($i -le 5) do-until-Schleife do { Write-Host $i; $i++ } until ($i -gt 5) foreach-Schleife foreach($element in $array) { Write-Host $element } foreach-Object Foreach-Object ist… weiterlesen »

SharePoint Solutions

Allgemeines Handling mit SharePoint Solutions und PoweShell. Auflisten aller SharePoint Solutions Get-SPSolution | Select Name, Added, Deployed, DeployedWebApplications, ` DeployedServers, DeploymentState, Status, SolutionId | fl SharePoint Solution in Farm hochladen Eine Solution muss zuerst in die Farm hochgeladen werden. $path = ‘C:\Temp\solution.wsp’ Add-SPSolution -LiteralPath $path SharePoint Solution in der Farm bereitstellen Nach dem Hochladen in… weiterlesen »

IIS Maintenance

IIS Logfiles Die Logfiles sind unter dem im IIS Manager eingestelleten Pfad als u_ex150710.log gespeichert. Application Pool recyclen appcmd recycle apppool /apppool.name:<Applicationpool name>

Array

Arbeiten mit Arrays in PowerShell. Variable initialisieren $array = @() Werte zuweisen $array = @(‘Single element’) foreach($item in $collection) { $array += ‘<new element>’ } $array = @(‘element1′,’element2′,’element3’) $array = @( ‘element1, ‘element2’, ‘element3’ ) Überprüfung auf Array if ($array -is [system.array]){…} if ($array $variable -isnot [system.array]){…} Erstes Element auslesen $array[0] Letztes Element auslesen $array[-1]… weiterlesen »

Domain Controller migrieren

Domain Controller Installieren Windows Features installieren Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools DC promoten Check Server for DC-installation Test-ADDSDomainControllerInstallation -DomainName $domain Install additional Domain Controller $domain = “”; $site = “”; $repldc = “” Install-ADDSDomainController -InstallDns -DomainName $domain -SiteName $site` -ReplicationSourceDC $repldc -SafeModeAdministratorPassword -NoRebootOnCompletion` -DatabasePath “E:\NTDS” -LogPath “E:\NTDS” -SysvolPath “E:\SYSVOL” FSMO Roles transfer Transfer forest-wide FSMO Roles to Target… weiterlesen »

DHCP Failover

DHCP Failover Windows Server 2012 Zwei DHCP Server werden so konfiguriert, dass sie Leases aus demselben Adresspool vergeben. Dann replizieren die beiden Server gegenseitig die Daten, wodurch jeder Server in der Lage ist allein die Leasevergabe zu übernehmen wenn ein Server ausfällt. Hot-Standby Mode Leases werden vom primären Server vergeben Der sekundäre übernimmt nur bei… weiterlesen »

Ports

Active Directory Ports Dynamischer RPC Port Range ab Windows Server 2008 Protokoll Transport Port RPC Windows Server 2008 tcp 49152 bis 65535 User Login und Authentication Protokoll Transport Port DNS tcp/udp 53 LDAP tcp/udp 389 Kerberos Authentication tcp/udp 88 Kerberos Password Transmission tcp/udp 464 *Microsoft RPC tcp 1025 Microsoft DS tcp/udp 445 LDAP Global Catalog… weiterlesen »

Built in Groups

Builtin local Groups -> Technet The following table provides descriptions of the default groups that are located in the Groups folder. The table also lists the default user rights for each group. These user rights are assigned in the local security policy. Administrators Members of this group have full control of the computer, and they… weiterlesen »

Active Directory abfragen

Active Directory mit PowerShell abfragen Bind aufs Active Directory Der einfachste Bind aufs AD mit PowerShell lautet: [adsi]’LDAP://contoso.com’ Output distinguishedName : {DC=contoso,DC=com} Path : LDAP://contoso.com Will man gleichzeitig noch ein Objekt (z.B. den Administrator) suchen, dann geht das so: $accountName = ‘Administrator’ $domainDnsName = ‘contoso.com’ $searcher = New-Object DirectoryServices.DirectorySearcher $searcher.Filter = “(sAMAccountName=$accountName)” $searcher.SearchRoot = “LDAP://$domainDnsName”… weiterlesen »

OS Version

Win32_OperatingSystem OS Version OS Version auf einem Computer auslesen: $computer = (read-host (“Enter Server name”)) (Get-WmiObject -Computer $computer -Class Win32_OperatingSystem).caption oder mit Get-WmiObject -Computer $computer -Class Win32_OperatingSystem | select -Property Version Service Pack Service Pack auf einem Computer auslesen: (Get-WmiObject -Computer $computer -Class Win32_OperatingSystem).CSDVersion oder mit Get-WmiObject -Computer $computer -Class Win32_OperatingSystem | select -Property ServicePack*… weiterlesen »

SharePoint Search

Search Service mit PowerShell abfragen. Enterprise Search abfragen Add-PSSnapin microsoft.sharepoint.powershell -ea 0 Get-SPEnterpriseSearchService Search Status abfragen Add-PSSnapin microsoft.sharepoint.powershell -ea 0 $sApplication = (Get-SPEnterpriseSearchServiceApplication).Name Get-SPEnterpriseSearchStatus -SearchApplication $sApplication Crawl Content Source auflisten Add-PSSnapin microsoft.sharepoint.powershell -ea 0 $sApplication = (Get-SPEnterpriseSearchServiceApplication).Name Get-SPEnterpriseSearchCrawlContentSource -SearchApplication $sApplication | ` Select Name, Id, Type, CrawlState, CrawlStarted, CrawlCompleted | ft -auto Crawl Database auflisten Add-PSSnapin… weiterlesen »

ACLs bearbeiten

ACLs mit PowerShell auflisten und schreiben. ACLs auflisten Get-Acl C:\Windows\Temp | select AccessToString | fl AccessToString : CREATOR OWNER Allow  268435456 NT AUTHORITY\SYSTEM Allow  FullControl NT AUTHORITY\SYSTEM Allow  268435456 BUILTIN\Administrators Allow  FullControl BUILTIN\Administrators Allow  268435456 BUILTIN\Users Allow  CreateFiles, AppendData, ExecuteFile, Synchronize ACLs schreiben Gewünschte ACLs auf einem File schreiben und in Object einlesen: $NewAcl =… weiterlesen »

Remote reboot

Restart mit PowerShell Restart-Computer ‘Server’ -credentials ‘Domain\administrator’ Restart über GUI Start, Run, shutdown /i gewünschten Computer eingeben… Restart über die Befehlszeile shutdown /r /m \\Server /c “Kommentar” /d [u|p] <xx>:<yy> /t 5 /force xx = 0 bis 255 (Hauptgrundnummer) yy = 0 bis 65’535 (Nebengrundnummer)

Remote logoff

Mit PowerShell ein remote logoff, funktioniert aber nur auf einen (aktiven) User. (gwmi win32_operatingsystem -ComputerName ‘Server’).Win32Shutdown(4) Win32Shutdown Values: 0 – logoff 4 – forced logoff 1 – shutdown 5 – forced shutdown 2 – reboot 6 – forced reboot 8 – power off 12 – forced power off Angemeldete User auflisten und spezifischen User abmelden:… weiterlesen »

Reboot timestamp

Mit PowerShell und WMI den Zeitpunkt des letzten Reboots herauslesen: Mit PowerShell 2.0 Get-WmiObject liefert kein DateTime-Object sondern einen LongDateString zurück, dieser muss noch in ein DateTime-Object umgewandelt werden. [Management.ManagementDateTimeConverter]::ToDateTime((Get-WmiObject -Class ` Win32_OperatingSystem | Select-Object -Property LastBootupTime).LastBootupTime) Remoteabfrage [Management.ManagementDateTimeConverter]::ToDateTime((Get-WmiObject -Class ` Win32_OperatingSystem -ComputerName $(read-host (“Enter Server name”))| ` Select-Object -Property LastBootupTime).LastBootupTime) Mit dem WMI Accelerator… weiterlesen »

Get Disks

Arbeiten mit Disks, Volumes und Partitions per PowerShell. Get-Member Alle Properties und Methods der wichtigsten WMI-Objects von Disks, Volumes und Partitions auflisten (funktioniert natürlich mit allen anderen Cmdlets auch). Get-WmiObject Win32_logicaldisk | gm Get-WmiObject Win32_Volume | gm Get-WmiObject Win32_DiskPartition | gm Get-WmiObject Win32_DiskDrive | gm Get-WmiObject Win32_MappedLogicalDisk | gm Diskspace auslesen Remote per PowerShell rasch… weiterlesen »

SharePoint Farm auslesen

SharePoint Farm mit PowerShell auslesen. PowerShell-Script Download GetSharePointFarm.ps1 from GitHub. Das Script liest folgende Werte aus, wenn es auf einem SharePoint-Server ausgeführt wird: Computername, CPU(s), RAM Diskinformationen wie DeviceID, MediaType, TotalSize, FreeSize, Percent SharePoint-Farm Version SPServiceApplicationPool SPWebApplication Site Collections SPServiceApplication SPServiceInstance SPDatabase

String Manipulationen

Ein String Alle Beispiele sind von folgendem String ausgehend: $text = ‘ …Hello 4 my 15 world… ‘ Die Methoden Clone CompareTo Contains CopyTo EndsWith Prüfen ob ein Text auf ein bestimmtes Zeichen (oder eine Zeichenkette) endet: $text.EndsWith(‘world’) False Equals Prüfen ob ein Text mit einem bestimmten String identisch ist: $text.Equals(‘Hello’) False $text.Equals(‘ …Hello 4… weiterlesen »

Bulk Import

Active Directory Bulk Import Ein Massenimport von Gruppen in ein Active Directory. Die Definitionen werden in einem CSV-File gemacht. PowerShell-Script Download BulkImport.ps1 from GitHub. In das Feld Notes wird automatisch der Timestamp des Imports geschrieben. Dies kann natürlich beliebig geändert werden, z.b. mit dem String ‘Auto import’. $now = $(get-date -f ‘yyyy-MM-dd HH:mm:ss’) Set-ADGroup $(GroupName)… weiterlesen »

Firewallport prüfen

Eine Verbindung zwischen zwei Computern zu prüfen, kann zu einem long-time Task führen. In diesem Beitrag wird dies zu einem short-time Task.

Find/Search

Die PowerShell Suche File(s) ab dem Folder F:\webapps abwärts suchen. $file = “web.config” $entry = “F:\webapps” gci -path $entry -filter $file -Recurse | select fullname, LastWriteTime | ft -auto

Powershell Ping

Test-Connection: Ping in PowerShell senden Mit Test-Connection wird ein Ping abgesetzt; die Firewall muss auf den Zielcomputern nicht geöffnet werden. $serverlist = @(“Server1″,”Server2″,”Server3”) $serverlist | % { if (Test-Connection -ComputerName $($_) -Quiet){ “Host available”” } else{ “Host not available” } }

Remote Commands

Ab PowerShell 3.0 Remote Commands auf Servern ausführen Als ersetes wird ein Array mit den Servernamen (oder deren IPs) abgefüllt. Danach wird das Array in einer Schleife abgearbeitet. Mit invoke-command -ComputerName $($_) -scriptblock{} wird der der Scriptblock remote auf dem Server abgesetzt und der Rückgabewert in die Variable $retinvoke abgespeichert. $serverlist = @(“Server1″,”Server2″,”Server3”) $ret =… weiterlesen »

Object abfüllen

PSObject in einer Schleife abfüllen $ret = @() $list | % { $obj = New-Object PSObject Add-Member -InputObject $obj -MemberType NoteProperty -Name Computer -Value $($_) Add-Member -InputObject $obj -MemberType NoteProperty -Name Path -Value $path $ret += $obj } $ret | ft -auto -wrap | Out-String

Datum/Zeit formatieren

Datumsobjekt Ergibt Freitag, 19. Dezember 2014 15:15:30 als Object 24-Stundenformat Ergibt 2014-12-19 15:15:30 als String 12-Stundenformat Ergibt 2014-12-19 03:15:30 als String DisplayHint Get-Date -DisplayHint DateTime Get-Date -DisplayHint Date Get-Date -DisplayHint Time Differenz zwischen zwei Zeitangaben berechnen Die Differenz zwischen zwei Zeitangaben kann ganz einfach mit PowerShell berechnet werden. Am Beispiel einer Stempeluhr: einstempeln, ausstempeln und… weiterlesen »

ZIP entpacken

Entpacken eines ZIP-FIles mit PowerShell function ExtractZipArchive{ <# .SYNOPSIS Extract an archive .DESCRIPTION Extract an archive from zip file .PARAMETER Archive Local path to the archive .PARAMETER Path Local path where to extract .EXAMPLE ExtractZipArchive -Archive ‘U:\tmp\archive.zip’ -Path ‘U:\tmp\archive’ #> param( [Parameter(Mandatory=$true)][String] $Archive, [Parameter(Mandatory=$true)][String] $Path ) $ret = $true $function = $($MyInvocation.MyCommand.Name) $option = 16… weiterlesen »

SharePoint Webapplication

Grundkonfiguration Webapplication Was macht der Farm Configuration Wizard: Managed Account bestehenden Account auswählen oder neuen hinzufügen sollte nicht der FarmAdmin (SPFarm) sondern ein anderer sein (warum?) Farm Services (Services welche auf allen Farm-Servern laufen) Bei Foundation wären das die folgenden Services App Management Service Business Data Connectivity Service (Lotus Notes) Search Service Application Secure Store… weiterlesen »

Cross-Forest Zugriff

Account- und Resource Domain Copyright (c) 2014 Martin Walther Trust verifizieren Get-ADObject -Filter {objectClass -eq “trustedDomain”} -Properties TrustPartner,TrustDirection,trustType | FT Name,TrustPartner,TrustDirection,TrustType Der Mythos mit den Gruppen und Berechtigungen Ausgehend von einem Domainfunctional Level Windows 2000 native oder Windows Server 2003 oder höher. Global Group Grösse: 8 Bytes MemberOf: Accounts und Global Groups aus der eigenen… weiterlesen »

SharePoint Recycle Bin

First Stage/Site Level/End-User Recycle Bin URL der Site im IE eingeben und mit dem Infra-Account anmelden, ganz unten auf das Papierkorb Icon klicken. Retention Policy: 30 Tage (default) werden Items vom User Recycle Bin gelöscht, so werden diese in den Site Collection Recycle Bin verschoben. Second Stage/Site Collection Recycle Bin URL der Site im IE… weiterlesen »

SharePoint Cmdlets

PowerShell-Commands SharePoint-Commandlets laden if ((Get-PSSnapin “Microsoft.SharePoint.PowerShell” -ea SilentlyContinue) -eq $null) { Add-PSSnapin “Microsoft.SharePoint.PowerShell” } Buildnumber der Farm auflisten (get-spfarm).buildversion Buildnumber der Products auflisten (Get-WmiObject -Class Win32_Product | Where {$_.IdentifyingNumber -like “*90150000-*”} ` | select Name, Version) | Sort -Property Name | ft -Autosize Service Applications auflisten Get-SPServiceApplication | Select DisplayName, ApplicationPoolName, Status | ft -auto… weiterlesen »

SharePoint Site Collection

Erstellen einer Site Collection Benötigte Informationen zum Erstellen einer Site Collection: Title der Site Collection Name (in der URL) der Site Collection Description der Site Collection Web Site Address (URL: http://…) Name Site Owner Mail Site Owner Template Layout von SharePoint 2010 oder 2013 (15) Basic (Team Site,…) Enterprise Custom WebApplication Content-DB Site Collection erstellen $Global:WebAppl… weiterlesen »

Central Administration

Konfiguration Central Administration mit SharePoint-Setup Vorgänig den SQL Server Alias mit cliconfg.exe oder per PowerShell setzen: Server alias: SharePointDBAlias Network library: <Name der Instanz> Connection parameters: <Server-FQDN>,<TCP Port> Das macht der SharePoint Product Configuration Wizard Im IIS Applicationpool «SharePoint Central Administration v4» wird unter dem Dienstkonto, welches im Wizard angegeben wird angelegt Site «SharePoint Central… weiterlesen »

SharePoint Grundinstallation

SharePoint-Setup Auf dem Medium .\setup.exe unter dem SPSetup-User als Administrator starten (Server Type Complete, Standalone will SQL Server Express 2008 installieren) Lizenzschlüssel eingeben Pfade für die Installation auswählen Language Packs installieren Nie den Wizard ausführen! Das Logfile vom Setup ist unter dem angemeldeten Benuter in dessen Temp-Folder. Im Explorer %Temp% eingeben und nach dem neusten… weiterlesen »

SharePoint Prerequisites

Installation Prerequisites Damit SharePoint 2013 überhaupt installiert werden kann, müssen ein paar Vorbereitungen auf den Webfrontend- und Applikationsserver getroffen werden. Install Prerequisites offline Wenn ein SharePoint-Server keinen Zugriff auf das Internet hat, so müssen die notwendigen Dateien zuerst von Microsoft heruntergeladen und im internen Netzwerk bereitgestellt werden. Download SharePoint 2013 Prerequisites Install WindowsFeatures Bevor der PrerequisiteInstaller… weiterlesen »

SharePoint Vorbereitungen

Allgemeine Vorbereitungen Die Grösse der Auslagerungsdatei sollte die Grösse des physikalischen RAMs überschreiten. Ansonsten können diverse Memory-Fehler im Betrieb entstehen, welche sogar den Server zu einem unexpected shutdown bringen. Single-Server mit integrierter Datenbank 8 GB RAM 4 Prozessorkerne 50 GB Harddisk als eigene Disk zweite IP Adresse auf NIC (Service IP für Webapplication) SQL-Server 8… weiterlesen »

Active Directory konfigurieren

Ist der Forest/Domain erstellt, wird als nächstes die OU-Struktur aufgebaut und danach die notwendigen Domain Admins erstellt. Im Anschluss wird dann der BuiltIn Administrator umbenannt und mit einem sehr langen und komplexen Passwort versehen, welches unter Verschluss aufbewahrt werden sollte. Organizational Units aufbauen Die OU-Struktur kann in etwa folgenderweise aussehen: Domain -<FA>_Computers —Windows_Servers —Linux_Servers —Special_Servers… weiterlesen »

Domain Controller konfigurieren

Nachdem wir einen Windows Server 2012 R2 bereitgestellt und mit dem Post-Staging-Script konfiguriert haben, können wir den Server zu einem Domain Controller promoten und damit einen Forest/Domain erstellen. Features installieren Auf dem zukünftigen Domain Controller müssen die Features Active-Directory-Domain-Services mit den Management-Tool installiert werden. Das machen wir natürlich mit einem PowerShell-Script: function InstallADDSFeatures{ <# .SYNOPSIS… weiterlesen »

Windows Features

Features auslesen Ein Features abfragen Get-WindowsFeature | Where-Object {$_.Name -like “Backup*”} Mehrere Features abfragen Get-WindowsFeature | Where-Object {$_.Name -like “Desktop*” -or $_.Name -like “Web-DAV*”} Installierte Features auflisten Get-WindowsFeature | Where InstallState -like installed Features on Demand Windows Server Update Services (WSUS) is not configurable as a recovery source for Features on Demand! If you wanted… weiterlesen »

Distributed File System

DFS DFS-Replication Replikation von Dateien auf zwei oder mehrere Fileserver über LAN oder WAN Windows Feature DFS-Replication muss auf allen beteiligten Servern installiert werden Identische Folderstruktur muss auf allen beteiligten Servern erstellt werden Replikation erfolgt über Active Directory File Replication Service (DFSR bzw. DFSRs.exe) DFS-Namespace Gemeinsamer Namensraum für den Share Service: DFS oder dfssvc.exe DFS-Namespace… weiterlesen »

Windows Server

Windows Server 2012 R2 Windows Server 2012 R2 wird in zwei verschiedenen Installationen eingesetzt. Server Core versus Server full GUI Die Standardinstallation ist mit Windows Server 2012 R2 Server Core. Ist es nun sinnvoll die Server als Server Core zu installieren oder wird sogar Server full GUI vorausgesetzt? Vorteile Server Core Installation benötigt ca. 5 GB… weiterlesen »

SharePoint Grundlagen

SharePoint 2013 Damit eine SharePoint-Farm aufgebaut werden kann, benötigt man mindestens eine Active Directory Domain, mehrere Windows Server, SQL Server und das richtige Lizenzmodel für SharePoint. SharePoint-Farm Eine SharePoint-Farm besteht aus Webfrontendserver, Applikationsserver und SQL Server. Windows Server In einer Testumgebung kann die komplette Farm auf einem einzelnen Windows Server aufgebaut werden. Ansonsten gibt es… weiterlesen »

Projekte

Ein Projekt ist ein zeitlich begrenztes Unternehmen, das unternommen wird, um ein einmaliges Produkt, eine Dienstleistung oder ein Ergebnis zu erzeugen. Nach dem Projekt kommt der Betrieb in der IT und hier ist der Lifecycle wiederum ein wichtiges Thema. Planung Das Wichtigste an einem Projekt ist dessen Planung. Dafür gibt es viele verschiedene Vorgehensmodelle, welche… weiterlesen »

Active Directory Grundlagen

Active Directory wird in jedem Windows Netzwerk benötigt in welchem mehr als 5 Computer und Benutzer bereitgestellt werden soll. Mit Active Directory werden die Ressourcen wie Computer, Drucker, Benutzer, Gruppen usw. zentral verwaltet. Active Directory Design (Forest/Domain) Active Directory soll so einfach aufgebaut werden wie möglich. Es macht keinen Sinn, Unternehmen in mehrere Domains aufzusplitten,… weiterlesen »

Rollenkonzept

Rollen und Berechtigungen Copyright (c) 2014 Martin Walther

Scripttemplate

PowerShell-Scripttemplate Mein neustes Template. <# .SYNOPSIS Kurzbeschrieb des Scripts .DESCRIPTION Ausführliche Beschreibung was das Script macht .PARAMETER Inputfile Fullpath to the inputfile .PARAMETER psdebug Run Script in debug mode .NOTES Author: Martin Walther Date created: 12.10.2014 .EXAMPLE .\Script.ps1-XmlFile ‘C:\scripts\config.xml’ -psdebug #> #region param [CmdletBinding()] param( [Parameter(Mandatory = $false, HelpMessage = ‘Enter the full-filename of the… weiterlesen »

HyperV VMs

Neue virtuelle Computer auf Basis eines Images mit PowerShell erstellen.

Server bereitstellen

Virtuelle Server bereitstellen Es gibt verschiedene Möglichkeiten Windows Server bereitzustellen, eine davon ist mit HyperV und PowerShell virtuelle Computer bereitstellen. Was benötige ich um diese Herausforderung zu bewältigen? Eine Strategie (Netzwerk, Server, Ausfallsicherheit, Redundanz, HyperV, Basisimages, …) Windows Server 2012 R2 Lizenzen HyperV-Server mit Storage Ein Basisimage von Windows Server 2012 R2 HyperV Host

Vergleichsoperatoren

Zahlen-/Zeichen-Vergleiche Equal (-eq, -ne) gleich 12 -eq 11 #ergibt False ungleich 12 -ne 11 #ergibt True Less than (-lt, -le) kleiner als kleiner oder gleich Greater than (-gt, -ge) grösser als grösser oder gleich Zeichenketten-Vergleiche Like (-like, -notlike) Ermitteln, ob eine bestimmte Zeichenkette in einer anderen enthalten ist. Like ignoriert die Gross- Kleinschreibung. “Nebel” -like… weiterlesen »

Userinteraktion

Benutzereingabe Abfrage auf der Commandline: $name = read-host (‘Enter your name’) Abfrage des Passwortes auf der Commandline: read-host -AsSecureString ‘Enter the password’ Umwandeln des SecureStrings in Cleartext: $spwd = read-host -AsSecureString “Enter the password for $($userid)” $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($spwd) $cpwd = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) Save credentials to a file $savecreds = Get-Credential $savecreds.GetType() $savecreds | Export-CliXml ‘C:\Temp\user.xml’… weiterlesen »

Environment

Environment Variablen Arbeiten mit Environment Variablen? Nichts ist einfacher als das! Auflisten aller Environment Variablen: Get-ChildItem Env: Erstellen einer neuen Environment Variablen: $env:TestVariable = “This is a test environment variable.” Löschen einer Environment Variablen: Remove-Item Env:\TestVariable Beispiel Aktuell angemeldeter Benutzer auflisten: $env:username

User Account

Alle lokalen Administratoren auflisten Ab PowerShell Version 2.0 function CheckLocalUsers{ <# Check local Users #> $function = $($MyInvocation.MyCommand.Name) $ret = @() try{ if($psdebug){write-host “Running $($function) …” -ForegroundColor Yellow} $adsi = [ADSI]”WinNT://$env:COMPUTERNAME” $adsi.psbase.children | Where-Object {$_.psBase.schemaClassName -eq “User”} | %{ $obj = New-Object PSObject $UserName = $_.Name[0].Trim() $FullName = $_.FullName[0].Trim() $Description = $_.Description[0].Trim() $SID = $_.objectSid… weiterlesen »

Compare-Object

Syntax Compare-Object [-ReferenceObject] <PSObject[]> [-DifferenceObject] <PSObject[]> [-CaseSensitive []] [-Culture ] [-ExcludeDifferent []] [-IncludeEqual []] [-PassThru ]] [-Property <Object[]>] [-SyncWindow ] [] Output Compare mit -PassThru listet als Output das formatierte Object auf. Compare-Object -ReferenceObject $sourcecol -DifferenceObject $targetcol -PassThru Name          : ICT-System-Engineer-Senior 65-3.pdf Fullname      : /Volumes/DATEN1/Test/Child1/ICT-System-Engineer-Senior 65-3.pdf LastWriteTime : 24.10.13… weiterlesen »

Services

Local Services Alle Services auflisten Get-Service Alle Services mit McAfee im DisplayName auflisten Get-CimInstance -Class win32_service -Filter “DisplayName LIKE ‘%McAfee%'” Alle Services mit StartMode Automatic auflisten Get-WmiObject Win32_Service | Where-Object {$_.StartMode -eq ‘Automatic’} Alle gestoppten Services mit StartMode Automatic auflisten Get-WmiObject Win32_Service | Select Name, State, StartMode, Started | ` where StartMode -eq ‘Auto’ |… weiterlesen »

Registry

List Subkeys Name, Property and Value Ab einem Hive alle Subkeys mit Name, Property und Value auflisten. function Get-RegistryProperties{ param( [Parameter(Mandatory=$true)][String] $hive ) $ret = @() if(Test-path -Path $hive){ $root = Get-Item $hive foreach($subkey in $root.GetSubKeyNames()){ $items = Get-Item “$hive\$subkey” if($items.subkeycount -eq 0){ foreach($prop in $items.Property){ $obj = [PSCustomObject]@{ Hive = $hive Name = $items.PSChildName Property… weiterlesen »

Script Control

Script Steuerung Am Ende des Scriptfiles (der Prozedur) wird die ganze Ablaufsteuerung vorgenommen. #region script control if($PSVersionTable.PSVersion.Major -ge 4){ Set-StrictMode -Version latest if($Error.Count -gt 0){$Error.Clear()} if($psdebug){ $ErrorActionPreference = ‘Stop’ } else{ $ErrorActionPreference = ‘SilentlyContinue’ } “$(Get-Date -DisplayHint DateTime) [INFORMATION] Start $($script:Scriptname), Version $($script:version)” | Out-File -FilePath “$($script:Scriptpath)\$($script:Logfile)” -Append -Encoding default $script:Scriptreturn += Get-LocalUser -Name Admin… weiterlesen »

Function

Konstrukt, das einen Wert zurückliefert Befehlsabfolgen, welche zusammengehören sollen in Functions zusammengefasst werden. function GetSomething{ <# .DESCRIPTION Get Something return . . . .EXAMPLE GetSomething -Param1 ‘Parameter 1’ -Param2 ‘Parameter 2’ -Param3 ‘Parameter 3’ #> [CmdletBinding()] param( [Parameter(Mandatory=$true)][String] $Param1, [Parameter(Mandatory=$true)][String] $Param2, [Parameter(Mandatory=$true)][String] $Param3 ) $ret = 0; $function = $($MyInvocation.MyCommand.Name) if ($psdebug){Write-Verbose “$($function) …” -Verbose}… weiterlesen »

Script Logging

Jedes Script schreibt ein Log Entweder in ein Logfile oder in das Eventlog. Mit nachfolgender Möglichkeit wird in ein Logfile auf dem Computer geschrieben. <# [INFORMATION] [ WARNING ] [ ERROR ] #> $script:Scriptpath = Split-Path -Parent $MyInvocation.MyCommand.Path $script:Scriptname = $MyInvocation.MyCommand.ToString() $script:Basename = $script:Scriptname.Remove($script:Scriptname.Length -4) $script:Logpath = “C:\Admin\Logs\$($script:Basename)” $script:Logfile = “$($script:Logpath)\$($script:Basename).log” “$(Get-Date -DisplayHint DateTime) [INFORMATION]… weiterlesen »

Globale Variablen

Script-global-gültige Variablen Nachdem wir die Parameter deklariert haben, folgt nun die Deklaration und Initialisierung der script-global-gültigen Variablen. #region scriptglobals $script:ScriptStart = (get-date) $script:Scriptpath = Split-Path -Parent $MyInvocation.MyCommand.Path $script:Scriptname = $MyInvocation.MyCommand.ToString() $script:Basename = $script:Scriptname.Remove($script:Scriptname.Length -4) $script:Logfile = $($script:Scriptname).Replace(‘.ps1′,’.log’) $script:version = ‘1.0.0.0000’ $script:Scriptreturn = @() #endregion In jedem Script wird der Startzeitpunkt, der Scriptname, ev. ein Configfile,… weiterlesen »

Projektplanung

Planung Die einfachste Planung ist ein Excelsheet mit den Spalten Aktivität, Lead, Starttermin, Endtermin, Status, Lieferobjekt Nr Aktivität Lead Starttermin Endtermin Status Lieferobjekt 01 Projekt intitalisieren Projektleiter 01.05.2014 31.05.2014 in Arbeit Projektauftrag 02 Kick Off Projektleiter offen Projektmeeting 03 . . .  . . .  . . .  . . .  . . .  …. weiterlesen »

Parameter

Übergabeparameter Nach dem Header im Script folgen die Übergabeparameter, welche im Header ja angegeben/beschrieben werden. #region param [CmdletBinding()] param ( [Parameter(Mandatory=$true)][String] $XmlFile, [Parameter(Mandatory=$true)][int] $ScriptCount = 0, [Parameter(Mandatory=$false)][switch]$psdebug = $false ) #endregion Nach jedem (ausser dem letzten) Parameter wird die Zeile mit einem Komma abgetrennt. Die Parameter können bereits hier bei der Deklaration mit Default Values… weiterlesen »

Automation mit PowerShell

Nichts ist mühsamer und «gurkt» einem mehr an als wenn man gleiche Abläufe immer wieder manuell durchführen muss. Es gibt eine einfache Lösung dazu, Automatisieren mit PowerShell, eine meiner Stärken. Automatisieren mit PowerShell Mit PowerShell lässt sich vorzüglich automatisieren. Sei es nur in einem Command Prompt einzelne Befehlsfolgen abzusetzen um rasch mehrere Dinge nacheinander durchzuführen… weiterlesen »

HyperV

Hyper-V, die Virtualisierung von Microsoft.

Sidebar