Archive for the ‘Powershell V3’ Category

Microsoft SQL Server per Powershell Cmdlets ansprechen

25 April 2013

Wenn man einen Microsoft SQL Server mittels Powershell ansprechen möchte, so gibt es nun eine ganz einfache Möglichkeit dies zu tun.

Dazu benötigt man nur:

ENU\x64\SQLSysClrTypes.msi
ENU\x64\SharedManagementObjects.msi
ENU\x64\PowerShellTools.msi

und installiert diese in genau dieser Reihenfolge. Die Dateien sind zu finden im “Microsoft® SQL Server® 2012 SP1 Feature Pack” unter http://www.microsoft.com/en-us/download/details.aspx?id=35580. Und wer es braucht, findet dort auch noch passende Versionen für 32-Bit.

Hier die Links zum direkt Anklicken für die 64-Bit Versionen:

http://download.microsoft.com/download/4/B/1/4B1E9B0E-A4F3-4715-B417-31C82302A70A/ENU/x64/SQLSysClrTypes.msi

http://download.microsoft.com/download/4/B/1/4B1E9B0E-A4F3-4715-B417-31C82302A70A/ENU/x64/SharedManagementObjects.msi

http://download.microsoft.com/download/4/B/1/4B1E9B0E-A4F3-4715-B417-31C82302A70A/ENU/x64/PowerShellTools.msi

Werbeanzeigen

Auf der Suche nach Powershell ISE, Ereignisanzeige

18 März 2013

Wer auf einem einfachen Windows 8 Rechner auf der Suche der Powershell ISE ist, der wundert sich, wo diese versteckt ist. Wenn man im Kachelstartmenü einfach Powershell eingibt, erscheint nur die Powershell Eingabeaufforderung. Wo ist der Rest?

Er ist da und gut versteckt! Für die Powershell ISE könnte man direkt %windir%\system32\WindowsPowerShell\v1.0\Powershell_ISE.exe aufrufen. Aber es gibt noch eine weitere Variante.

Bei aktiver Startseite, öffnet man die Charms-Leiste, klickt auf Einstellungen und noch auf Kacheln. Hier ändert man den Schalter Verwaltungstools anzeigen von Nein auf Ja. Danach findet man die Powershell ISE. Eine Alternative stellt die Tastenkombination WIN+I und dann die Eingabetaste dar.

Insgesamt werden durch die Änderung des Schalters diese Tools freigeschaltet:

Aufgabenplanung
Computerverwaltung
Datenträgerbereinigung
Dienste
Ereignisanzeige
iSCSI-Initiator
Komponentendienste
Laufwerke defragmentieren und optimieren
Leistungsüberwachung
ODBC-Datenquellen (32-Bit)
ODBC-Datenquellen (64-Bit)
Ressourcenmonitor
Systeminformationen
Systemkonfiguration
Windows PowerShell (x86)
Windows PowerShell SE (x86)
Windows PowerShell SE
Windows-Firewall mit erweiterter Sicherheit
Windows-Speicherdiagnose

Wie gesagt, sind alle sowieso da aber durch die Änderung des Schalters, werden Sie auf der Startseite auch eingeblendet.

Man kann die aktuelle Einstellung auch über die Registrierung abfragen. Mittels

REG QUERY HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced

erhält man unter anderem den Eintrag StartMenuAdminTools angezeigt, ist dieser 0x1 werden die Verwaltungstools angezeigt, bei 0x0 nicht. Leider bringt eine Änderung des Registry-Eintrags nichts, auch wenn man einen Neustart probiert.

Windows Driverstore mittels Powershell auslesen

12 Februar 2013

Seit Windows Vista gibt es den sogenannten Windows Driverstore. Im Windows Driverstore sind alle Treiber welche Windows mitbringt verzeichnet. http://msdn.microsoft.com/en-us/library/windows/hardware/ff544868(v=vs.85).aspx

Man kann die enthaltenen Treiber mittels DISM auslesen (als Admin):

dism /online /get-drivers /all /format:Table

Dabei bekommt man eine Liste wie diese

Tool zur Abbildverwaltung für die Bereitstellung
Version: 6.1.7600.16385

Abbildversion: 6.1.7600.16385

Liste aller Treiber wird aus dem Treiberspeicher abgerufen…

Treiberpaketauflistung:

———————————- | ———————————- | ————– | ———————- | —
——————————————————– | ———- | —————-
Veröffentlichter Name              | Originaldateiname                  | Windows-intern | Klassenname            | Anb
ietername                                                | Datum      | Version
———————————- | ———————————- | ————– | ———————- | —
——————————————————– | ———- | —————-
1394.inf                           | 1394.inf                           | Ja             | 1394                   | Mic
rosoft                                                   | 21.06.2006 | 6.1.7601.17514
61883.inf                          | 61883.inf                          | Ja             | 61883                  | Mic
rosoft                                                   | 21.06.2006 | 6.1.7600.16385
acpi.inf                           | acpi.inf                           | Ja             | System                 | Mic
rosoft                                                   | 21.06.2006 | 6.1.7601.17514
acpipmi.inf                        | acpipmi.inf                        | Ja             | System                 | Mic
rosoft                                                   | 21.06.2006 | 6.1.7601.17514
adp94xx.inf                        | adp94xx.inf                        | Ja             | SCSIAdapter            | Ada
ptec                                                     | 11.11.2008 | 1.6.6.4
adpahci.inf                        | adpahci.inf                        | Ja             | SCSIAdapter            | Ada
ptec                                                     | 27.04.2007 | 1.6.6.2
adpu320.inf                        | adpu320.inf                        | Ja             | SCSIAdapter            | Ada
ptec                                                     | 25.01.2007 | 7.2.0.0

sieht nicht schön aus, aber hat Gehalt.

Ok, aber wir bewegen uns in der Powershell-Welt, wie siehts da aus? Leider bringt erst Windows 8 DISM-Cmdlets mit. Aber mittels Piping kann man DISM zur Mitarbeit überreden:

$ds=dism /online /get-drivers /all /format:Table

ließt zunächst die ganze Tabelle in die Variable $ds ein. Die spannenden Teile bekommt man mittels

$ds[14..($ds-length-4)]

ausgegeben.

Mittels dieser Zeile bekommt man alles schön brav als Powershell-Objekte präsentiert:

$di=$ds[14..($ds.length-4)]|foreach {$f=$_.Split("|"); new-object -typename psobject -Property  @{PublishedName=$f[0];OriginalFileName=$f[1];Inbox=$f[2];ClassName=$f[3];ProviderName=$f[4];Date=Get-Date($f[5]);Version=$f[6]} }

Nun kann man die üblichen Powershell-Spielchen bringen wie z. B. die Ausgabe in einer Tabelle:

$di | out-gridview

Hier eine Übersicht der einzelnen Treiber je Klasse:

$di | group -property Classname | select count, name

Oder Ausgabe aller Druckertreiber:

$di | where {$_.Classname -eq "Printer"}

Oder die Druckertreiber eines Herstellers wie HP:

$di | where {$_.Classname -eq "Printer" -and $_.Providername -match "HP"}

Was zur Ausgabe

Date             : 29.10.2010 00:00:00
Version          : 61.109.9.8874
PublishedName    : oem5.inf
OriginalFileName : hpcu109u.inf
ProviderName     : HP
ClassName        : Printer
Inbox            : Nein

Date             : 21.06.2006 00:00:00
Version          : 6.1.7600.16385
PublishedName    : prnhp002.inf
OriginalFileName : prnhp002.inf
ProviderName     : HP
ClassName        : Printer
Inbox            : Ja

Date             : 21.06.2006 00:00:00
Version          : 6.1.7600.16385
PublishedName    : prnhp003.inf
OriginalFileName : prnhp003.inf
ProviderName     : HP
ClassName        : Printer
Inbox            : Ja

Date             : 21.06.2006 00:00:00
Version          : 6.1.7600.16385
PublishedName    : prnhp004.inf
OriginalFileName : prnhp004.inf
ProviderName     : HP
ClassName        : Printer
Inbox            : Ja

Date             : 21.06.2006 00:00:00
Version          : 6.1.7600.16385
PublishedName    : prnhp005.inf
OriginalFileName : prnhp005.inf
ProviderName     : HP
ClassName        : Printer
Inbox            : Ja

hat.

Moment hier tauchen nur fünf Treiber auf? Komisch oder?

Aber kein Problem es gibt einen weiteren DISM-Befehl der weitere Infos zutage fördert:

dism /online /get-driverinfo /driver:prnhp005.inf

Mittels diesem erhält man weitere Treiberinformationen:

Tool zur Abbildverwaltung für die Bereitstellung
Version: 6.1.7600.16385

Abbildversion: 6.1.7600.16385

Treiberpaketinformationen:

Veröffentlichter Name : prnhp005.inf
Treiberspeicherpfad : C:\Windows\System32\DriverStore\FileRepository\prnhp005.inf_amd64_neutral_914d6c300207814f\prnhp00
5.inf
Klassenname : Printer
Klassenbeschreibung : Drucker
Klassen-GUID : {4D36E979-E325-11CE-BFC1-08002BE10318}
Datum : 21.06.2006
Version : 6.1.7600.16385
Für den Start erforderlich : Nein

Treiber für Architektur : amd64

    Hersteller : HP
    Beschreibung : HP Photosmart C309a series
    Architektur : amd64
    Hardware-ID : HPPhotosmart_C309a_s277D
    Dienstname :
    Kompatible IDs : HP_Photosmart_C309a_series
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Photosmart C309a series BT
    Architektur : amd64
    Hardware-ID : HPPhotosmart_C309a_sA58A
    Dienstname :
    Kompatible IDs : HP_Photosmart_C309a_series_BT
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Officejet Pro 8000 A809 Series
    Architektur : amd64
    Hardware-ID : HPOfficejet_Pro_8000e3dd
    Dienstname :
    Kompatible IDs : HP_Officejet_Pro_8000_A809_Series
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Officejet Pro 8500 A909n Series
    Architektur : amd64
    Hardware-ID : HPOfficejet_Pro_8500e33c
    Dienstname :
    Kompatible IDs : HP_Officejet_Pro_8500_A909n_Series
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Officejet Pro 8500 A909g Series
    Architektur : amd64
    Hardware-ID : HPOfficejet_Pro_8500e5fc
    Dienstname :
    Kompatible IDs : HP_Officejet_Pro_8500_A909g_Series
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Officejet Pro 8500 A909a Series
    Architektur : amd64
    Hardware-ID : HPOfficejet_Pro_8500e77c
    Dienstname :
    Kompatible IDs : HP_Officejet_Pro_8500_A909a_Series
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Officejet Pro 8500 A909n Series BT
    Architektur : amd64
    Hardware-ID : HPOfficejet_Pro_85007188
    Dienstname :
    Kompatible IDs : HP_Officejet_Pro_8500_A909n_Series_BT
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Officejet Pro 8500 A909g Series BT
    Architektur : amd64
    Hardware-ID : HPOfficejet_Pro_8500ed8b
    Dienstname :
    Kompatible IDs : HP_Officejet_Pro_8500_A909g_Series_BT
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Officejet Pro 8500 A909a Series BT
    Architektur : amd64
    Hardware-ID : HPOfficejet_Pro_8500658b
    Dienstname :
    Kompatible IDs : HP_Officejet_Pro_8500_A909a_Series_BT
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Officejet 6500 E709n Series
    Architektur : amd64
    Hardware-ID : HPOfficejet_6500_E70e4a2
    Dienstname :
    Kompatible IDs : HP_Officejet_6500_E709n_Series
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Officejet 6500 E709a Series
    Architektur : amd64
    Hardware-ID : HPOfficejet_6500_E70e0e2
    Dienstname :
    Kompatible IDs : HP_Officejet_6500_E709a_Series
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Officejet 6000 E609a Series
    Architektur : amd64
    Hardware-ID : HPOfficejet_6000_E604cdc
    Dienstname :
    Kompatible IDs : HP_Officejet_6000_E609a_Series
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Officejet 6000 E609n Series
    Architektur : amd64
    Hardware-ID : HPOfficejet_6000_E60489c
    Dienstname :
    Kompatible IDs : HP_Officejet_6000_E609n_Series
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Deskjet F4400 series
    Architektur : amd64
    Hardware-ID : HPDeskjet_F4400_seri4818
    Dienstname :
    Kompatible IDs : HP_Deskjet_F4400_series
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Photosmart C4600 series
    Architektur : amd64
    Hardware-ID : HPPhotosmart_C4600_sEC29
    Dienstname :
    Kompatible IDs : HP_Photosmart_C4600_series
    Ausschluss-IDs :

    Hersteller : HP
    Beschreibung : HP Deskjet D2600 series
    Architektur : amd64
    Hardware-ID : HPDeskjet_D2600_seri56FC
    Dienstname :
    Kompatible IDs : HP_Deskjet_D2600_series
    Ausschluss-IDs :

Der Vorgang wurde erfolgreich beendet.

Hier kann man nun den einzelnen Druckernamen erkennen.

Diese Druckerinfos kann man wieder in einer Variable einlesen:

$pd=dism /online /get-driverinfo /driver:prnhp005.inf

und natürlich wieder in Powershell-Objekte übertragen:

$pdl=$pd|select-string -Context 7 -Pattern Hersteller

Sorry aus Zeitmangel überlasse ich es jedem selber hier die sinnvollen Informationen auszulesen.

Hier noch zwei Blogeinträge passend zum Thema, wo mittels Excel eine Übersicht über enthaltene Treiber im Driverstore geliefert werden: http://www.verboon.info/index.php/2010/12/inside-the-windows-7-driver-store/ und http://www.verboon.info/index.php/2011/01/inside-the-windows-7-driver-storepart-2/.

Powershell 9 Arten ein externes Programm zu starten, mir sind aber 11 bekannt oder noch mehr?

7 Januar 2013

Dieser Artikel http://www.admin-source.de/BlogDeu/433/powershell-9-arten-ein-externes-programm-executable-zu-starten, dessen Grundlage, dieser Technet-Wiki-Eintrag ist http://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx, spricht von 9 Arten externe Programme unter Powershell starten zu können.

Allerdings muss man bei Version 2 von Powershell sagen, es gibt eigentlich 10 Arten, denn es gibt das tolle Kommando Invoke-WSManAction http://technet.microsoft.com/en-us/library/hh849865.aspx. Mit den richtigen Parametern gefüttert:

Invoke-WSManAction -Action create -ResourceURI wmicimv2/win32_process -ValueSet @{commandline="notepad.exe";currentdirectory="C:\"}

führt dies auch zum Start von Notepad.exe!

Jetzt mag der eine oder andere einwenden, dass ja nur Win32_Process aufgerufen wird aber wird nicht auch bei den anderen Möglichkeiten im Hintergrund immer nur CreateProcess() aufgerufen?

Ach übrigens mit Powershell 3 gibt es noch eine weitere Variante! Die da wäre Invoke-CIMAction http://technet.microsoft.com/en-us/library/jj590759.aspx. Dies sind dann so aus:

$cim=Invoke-CimMethod -ClassName Win32_process -MethodName "Create" -Arguments @{ Commandline="notepad.exe";CurrentDirectory="C:\" }

Wenn ich allerdings jetzt nochmal genau darüber nachdenke, dann fallen mir noch weitere Möglichkeiten ein, wie z. B. ScheduledJobs, BackgroundJobs also Jobs allgemein, mittels Win32_ScheduleJob oder indem man einen Druckertreiber mit entsprechendem Monitorprogramm installiert und dann was ausdruckt. Dann wäre da noch die Möglichkeit über Win32_Service. Und es gibt noch soviel mehr, wenn man seine Kreativität walten lässt.

Man könnte ja auch Powershell benutzen, um mehr zu erfahren

gwmi -List | where if ($_.methods -ne $null) {($_.methods).name -contains "Create"}

listet unter anderem

Win32_Process
Win32_BaseService
Win32_Service
Win32_TerminalService
Win32_SystemDriver
Win32_ScheduledJob

Bei CIM wären die Invoke-Aktionen aber CIM ist noch so undurchschaubar. Gute, wenn auch alte Infos über CIM gibt es hier: http://klaus.jaehne.de/papers/cim/node6.html.

Ich glaub jetzt bin ich irgendwie übers Ziel rausgeschossen. Halten wir also fest: Es gibt mehr Methoden, als wir zu wissen glauben.

Powershell 3.0 Update meldet “Das Update ist nicht für Ihren Computer geeignet.”

18 September 2012

Obwohl eigentlich alles passen müsste, lässt sich das Update für Powershell 3.0 unter z. B. Windows 7 nicht direkt einspielen. Das Problem könnte das Fehlen des kompletten .Net Framework 4 sein, welches sich unter den installierten Programmen mit dem Anhängsel Extended verewigt.

http://social.technet.microsoft.com/Forums/de-DE/powershell_de/thread/5ef3dd1e-0057-4a0a-ad55-c9169b004279

Supersimpel virtuelle Maschinen einrichten

10 Juli 2012

Zuerst eine ausführliche Beschreibung und am Ende der Verweis auf Wim2VHD unter Windows 8.

http://www.hyper-v.nu/archives/hvredevoort/2012/06/mike-kolitz-superduper-windows-8server-2012-deployment-cmdlet/#more-2939

http://gallery.technet.microsoft.com/scriptcenter/Convert-WindowsImageps1-0fe23a8f

Damit lassen sich dann Netzschwärme erstellen!

Powershell Version dynamisch zurücksetzen – oder wie löse ich meine Probleme in Sharepoint 2010 und Exchange Server 2010 Skripten?

6 Juli 2012

Die nächsten Wochen wird Powershell 3.0 freigegeben. Es ist mächtiger und besser denn je, bringt teilweise eine einfachere Syntax mit und auf Windows 8 sowie Server 2012 jede Menge neue Cmdlets.

Was aber ist, wenn ein Script, welches seither ohne Probleme lief, nicht mehr funktioniert? Dieser Aspekt trifft vor allem Kandidaten, die Sharepoint 2010 via Powershell administrieren möchten, für den Exchange Server 2010 gilt es bestimmt auch.

http://connect.microsoft.com/PowerShell/feedback/details/746908/powershell-3-0-and-sharepoint-2010

Die Lösung ist die Angabe der Versionsnummer beim Aufruf von Powershell.exe

Powershell –Version 2

aktiviert die alter Version 2 mit der zugehörigen CLR Version 2.

Powershell –Version 3

ruft die aktuelle Version auf, welche die CLR Version 4 vom .NET Framework 4 verwendet.

Komischerweise funktioniert allerdings der Aufruf von –Version 1 nicht, warum? Keine Ahnung. Aber die Beschreibung unter http://technet.microsoft.com/en-us/library/hh847736.aspx geht kurz darauf ein.

Das ganze in Bildern: http://www.howtogeek.com/114548/how-to-run-powershell-2-and-3-concurrently-in-windows-8/

Prüfen, ob eine Powershell Sitzung in einer 32Bit oder 64Bit Prozess-Umgebung läuft

20 Juni 2012

Wichtig um Probleme schneller beheben zu können ist immer die Kenntnis, in welcher Umgebung, also ob 32Bit- oder 64Bit-Umgebung, man sich befindet.

In Powershell gibt es verschiedene Möglichkeiten dies herauszufinden. Leider zeigt die normale Versionsinfo dies nicht direkt an. Siehe auch: https://newyear2006.wordpress.com/2009/12/07/powershell-2-0-versionsabfrage/. Auch eine Abfrage von Get-Host bringt die gewünschte Info nicht zutage.

Aber es gibt ja noch andere Möglichkeiten. Die einfachste ist

[Environment]::Is64BitProcess

Alternativ gibt es noch den Weg über die Plattformpointergrößen-Abfrage:

[IntPtr]::Size

Wird hier 4 zurückgegeben ist man in einem 32Bit Prozess, bei 8 befindet man sich in einem 64Bit Prozess. http://stackoverflow.com/questions/8588960/determine-if-current-powershell-process-is-32-bit-or-64-bit

Öffnet man unter Windows 7 mit 64Bit oder Windows 8 mit 64Bit, bzw. Server 2008 R2 oder Windows Server 2012 mittels CMD.EXE eine Eingabeaufforderung und startet von dort Powershell, befindet man sich immer in einer 64Bit Umgebung. Erst wenn man explizit mittels Aufruf von

C:\Windows\SysWOW64\cmd.exe

explizit die 32Bit-CMD.EXE startet, gelangt man in die 32Bit-Powershell Umgebung.

Neues in Powershell 3.0

24 März 2012

Hier wird beschrieben was es alles Neues in Powershell 3.0 gibt: http://technet.microsoft.com/en-us/library/hh857339.aspx. Das ist aber bei weitem nicht alles, denn es sind nur die Hauptneuerungen von PS3 im Innern.

Interessante Dinge vom

Autoloading von Cmdlets: http://technet.microsoft.com/en-us/library/hh857339.aspx#BKMK_AutoLoad

Unblocking von aus dem Internet heruntergeladenen Dateien: http://technet.microsoft.com/en-us/library/hh857339.aspx#BKMK_UnblockFile

Natürlichere Syntax für Abfragen: http://technet.microsoft.com/en-us/library/hh857339.aspx#BKMK_WhereFor

Und für künftige Aufgaben im Sinne von OData und als cURL-Ersatz die neuen WebCmdlets: http://technet.microsoft.com/en-us/library/hh857339.aspx#BKMK_WebCmdlets, hier speziell Invoke-RestMethod: http://technet.microsoft.com/en-us/library/hh849971.aspx

Auch der Aufgabenplaner (Task Scheduler) lässt sich nun direkt ansprechen: http://technet.microsoft.com/en-us/library/hh857339.aspx#BKMK_ScheduledJob

Ja und dann war da noch der WebAccess: http://technet.microsoft.com/en-us/library/hh847754.aspx

Und vieles weitere mehr…

Hier werden die Core-Routinen beschrieben: http://technet.microsoft.com/en-us/library/hh847741.aspx