Tags

Howto (51) Free Software (35) Powershell (33) Windows Server (23) AD (16) Hyper-V (16) Exchange (13) Office (13) Group Policy (10) Windows Server 2012 (9) Scripts (7) Symantec BE (5) Windows 8 (5) Cisco (4) TMG (4) Terminal Server (4) Cluster (3) HP (3) RDS (3) UAG (3) Citrix (2) DC (2) DNS (2) IE10 (2) OpenID (2) PKI (2) SCVMM (2) Windows Live (2) iLO (2) Backup (1) DPM (1) Fileserver (1) IE (1) SQL; DPM (1) Security (1) Sharepoint (1) Switch (1) VMWare (1) Veeam (1)

maandag 28 oktober 2013

SCVMM 2012 Error 12711

Na het afbreken van een backup in DPM ging een VM onderuit, deze VM startte daarna niet meer op, zie onderstaande foutmelding:
 
Error (12711)
VMM cannot complete the WMI operation on the server (hv01.domain.local) because of an error: [MSCluster_Resource.Name="SCVMM Naam-VM"]
The requested operation can not be completed because a resource has locked status.
 
The requested operation can not be completed because a resource has locked status (0x1748)
 
Recommended Action
Resolve the issue and then try the operation again.
 
 
 
Oplossing:
 
 
Get-ClusterResource -Cluster clusternaam | where {$_.Name -like 'SCVMM *' -and $_.ResourceType -like '*Configuration'} | Update-ClusterVirtualMachineConfiguration
 
 
Daarna de VM een refresh gegeven in SCVMM en gestart.
 
 

Powershell XML input

 
 
Lees de xml in en plaats het in een variabele:
 
$xml = [xml](Get-Content .\r_and_j.xml)
$xml.PLAY
$xml.PLAY.ACT
 
 
 
$xml.PLAY.ACT.SCENE.SPEECH | group speaker | sort count
 
 
 

Powershell cmdlet function Begin-Process-End

BEGIN: Setting up code necessary to do your processing (pre-processing)
PROCESS: Does the processing
END: Cleaning up code (post-processing)
 
De code in PROCESS wordt altijd minimaal 1x uitgevoerd, dus plaats hier altijd je code in ook al gebruik je de pipeline input niet. Mocht je later toch pipeline input wensen dan staat de code iig op de juiste plaats.
 
Voorbeeld:
Het kan voorkomen dat je eerst een verbinding moet maken met een SQL database alvorens je de input gaat processen.
Nadat alles geprocessed is kan er opgeruimd worden.
 
 
Voorbeeld 1:
 
 
 
Voorbeeld 2:
 
 
Zie ook:
 
 
 

Achterhalen of een bestand is gedownload of zelf is gemaakt

Als je een bestand met Internet Explorer download, slaat deze zone informatie op  in een ADS (Alternate Data Stream).
 
Voorheen kon je ADS alleen bekijken met speciale tooltjes, vanaf Windows 8 / 2012 is dat ook mogelijk met Powershell.
 
Hieronder zie je dat in de map c:\test een viertal bestanden staan, twee daarvan zijn gedownload en twee ervan zijn zelf gemaakt. Met dit of get-item kun je niet zien welke gedownload zijn en welke niet. Dat komt omdat deze informatie in een ADS zit opgeslagen.
 
Je kunt met het volgende commando achterhalen welke bestanden gedownload zijn:
 
Get-Item -Path * -Stream *  | where {$_.Stream -eq "Zone.Identifier"} | ft filename,stream,length -a
 
Je kunt daarna achterhalen met welk ZoneId het bestand is gedownload:
 
Get-Content -Path .\download1.zip -Stream Zone.Identifier
 
Hieronder kun je zien dat ZoneId =3 betekent dat het bestand van Internet afkomstig is:
 
Value Setting
------------------------------
0     My Computer
1     Local Intranet Zone
2     Trusted sites Zone
3     Internet Zone
4     Restricted Sites Zone
 
Het is overigens mogelijk om bestanden in een ADS te zetten van een ander bestand.
Hieronder zie je dat ik het programma notepad.exe in de ADS van bestand lokaalgemaakt1.txt plaats:
 
 
Met powershell kun je de stream bekijken:
 
Get-Item -Path * -Stream *  | ft filename,stream,length -a
 
 
Waarbij het vroeger mogelijk was om met commando “start bestandsnaam:adsbestand” het programma te openen is dat in Windows 8 iig niet meer mogelijk:
 
 
Je kunt de ADS weghalen door onderstaande commando’s uit te voeren:
 
C:\Test>type lokaalgemaakt1.txt > lokaalgemaakt1.bak
C:\Test>del lokaalgemaakt1.txt
C:\Test>ren lokaalgemaakt1.bak lokaalgemaakt1.txt
 
Als je daarna weer in PS naar de streams bekijkt zie je dat deze verdwenen is:
 
Get-Item -Path * -Stream *  | ft filename,stream,length -a
 

maandag 21 oktober 2013

Powershell snapshot van processen / services op server en deze vergelijken met de huidige processen

Het kan handig zijn om een overzicht te hebben van de processen op je servers en deze zo nu en dan te vergelijken met de huidige draaiende processen.
Dit om afwijkingen (bijvoorbeeld Malware) te kunnen constateren.
 
Maak een baseline / snapshot / referenceobject van de draaiende processen:
 
Get-Process | Export-Clixml -Path .\ro-processes.xml
 
Vergelijk deze vervolgens met de huidig draaiende processen:
 
Compare-Object -ReferenceObject (Import-Clixml .\ro-processes.xml) -DifferenceObject (Get-Process) -Property name
 
 
 
De SideIndicator geeft met het pijltje aan of er een  process is bijgekomen of afgegaan.
 
Je kunt dit natuurlijk ook doen met services en dit schedulen zodat eventuele wijzigingen per mail oid binnen komen.
 

Check Powershell Version

Je kunt op een paar manieren erachter komen welke Powershell versie je hebt draaien.
 
Via Registry:
 
HKLM\SOFTWARE\Microsoft\Powershell\3\PowershellEngine
 
Via Powershell:
 
Get-Host
 
Of nog beter gebruik de built-in variable:
 
$PSVersionTable
 
 

Remote Powershell informatie

Remote Powershell kun je gebruiken door op de target-computer het commando: “Enable-PSRemoting –Force” te gebruiken.
Hiermee wordt WinRM geconfigureerd en er worden tevens firewall uitzonderingen gemaakt.
 
De listeners van WinRM staan standaard open op alle interfaces/ip adressen en luisteren naar 5985 (http) en 5986 (https).
 
Zie ook:
 
 
Voer: “winrm help config” uit om meer informatie betreft het configureren van WinRM.
 
Hierin staat oa:
 
Voorbeeld: een bepaalde listener uitschakelen
  winrm set winrm/config/listener?Address=IP:1.2.3.4+Transport=HTTP @{Enabled="false"}
 
en ook (geruststellend) :
 
Opmerking: bij HTTP-verkeer zijn standaard alleen berichten toegestaan die zijn versleuteld met de SSP Negotiate of Kerberos
 
Door onderstaande commando's uit te voeren kun je ervoor zorgen dat Powershell Remoting de poorten 80 (HTTP) en 443 (HTTPS) gebruikt:
 
Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpListener -Value true
Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpsListener -Value true
 
Je kunt powershell zo instellen dat deze een andere gewenste poort gebruikt:
 
Set-Item wsman:\localhost\listener\listener*\port –value <Port>
 
In de code moet je dan opgeven dat je over de ingestelde poort wilt verbinden:
 
New-PSSession –ComputerName <Netbios> -Port <Port>
Enter-PSSession –ComputerName <Netbios> -Port <Port>
Invoke-Command –ComputerName <Netbios> -Port <Port>
 
 
TrustedHosts toevoegen aan WinRM omdat de computer niet lid is van het(zelfde) domein:
 
 
Voer onderstaand commando uit:
 
winrm s winrm/config/client '@{TrustedHosts="RemoteComputer"}'
 
 
 
Wil je dat Powershell alleen over HTTPS communiceert, dan vindt je hier meer informatie:
 
Configuring WINRM for HTTPS: http://support.microsoft.com/kb/2019527
 
Handig is het natuurlijk wel als je centraal kunt regelen dat je naar alle servers een Remote Powershell sessie kunt opstarten: Hier een blog over hoe je Remote PS enabled via een GPO: