Power Shell? Benutzt du es? Können Sie mir ein paar nützliche Dinge für die Systemadministration zeigen, die ich damit machen kann? [geschlossen]

45

Ich lese überall, dass PowerShell der Weg der Zukunft ist. Als es zum ersten Mal veröffentlicht wurde, habe ich eine ganze Reihe von virtuellen Labors durchgeführt, aber seitdem habe ich es noch nicht in einer Produktionsumgebung verwendet. Ich weiß, dass der Tag kommen wird, an dem ich mich mit Betriebssystemen befasse, auf denen sie bereits installiert sind, also möchte ich bereit sein.

Ich möchte wissen:

  1. Benutzt du es?
  2. Was war Ihr "Bootstrapping" -Prozess für die Verwendung von PowerShell?
  3. Welche Art von Systemadministrationsaufgaben haben Sie damit geschrieben?
  4. Ich bin ein SQL Server-Datenbankadministrator. Was sind einige coole Dinge, die damit zu tun haben?

Anscheinend sind sich alle einig, dass Microsoft dies stark vorantreibt, aber niemand nutzt es tatsächlich. Ich möchte von Systemadministratoren hören, die es verwenden, um alltägliche Aufgaben zu erledigen und einige Codebeispiele auszutauschen.

Nick Kavadias
quelle
JScript ist tot?
Sophie Alpert
7
Versuchen Sie, das nächste Mal kein Troll mit Ihren irreführenden Schlagzeilen zu sein.
Jaykul
Vielleicht liegt es daran, dass ich manchmal wünschte, es würde wie JScript verschwinden. Bin es nur ich oder ist es sehr hässlich und wortreich?
Nick Kavadias

Antworten:

34

Microsoft unternimmt alles, um PowerShell zur ersten Wahl für Power-User und Automatisierungsautoren zu machen. Die Zeiten, in denen Code in .NET kompiliert wurde, um dasselbe zu tun, sind vorbei. Jetzt benötigen Sie nur noch notepad.exe und google. Wir sind große Fans davon im Büro, zumal die Exchange 2007-Verwaltungskonsole NICHT alles enthält, was Sie in PowerShell tun können. Microsoft hat es absichtlich versäumt, Dinge zu implementieren, die nur von Zeit zu Zeit erledigt werden und die einfacher zu entwickeln sind. Dies erzwingt geradezu die Verwendung, wenn Sie etwas haben, das einer komplexen Umgebung ähnelt.

Das Verwalten der neueren Produktgeneration von Microsoft (Win7, Windows Server 2008, Exchange 2007/2010, SQL Server 2008) verfügt über umfangreiche PowerShell-Hooks. Sobald Remote Powershell (PowerShell 2.0 IIRC) mit Server 2008 R2 bereitgestellt wird, wird es für Automatisierungsautoren noch nützlicher.

Was wir damit gemacht haben:

  • Erstellen Sie eine Webseite, um bestimmte Administratoraufgaben an Helpdesk-Benutzer zu delegieren. Die Webseite löst Befehle aus, die in PowerShell ausgeführt werden. Dinge, die es tut:
    • Erstellen und Löschen von Benutzerkonten, einschließlich der Bereitstellung von Exchange 2007-Postfächern und Basisverzeichnissen
    • Entsperrt gesperrte Konten
    • Gruppen erstellen / löschen
    • Hinzufügen / Entfernen von Benutzern zu Gruppen
    • Benutzer zwischen Mail-Stores verschieben
    • Passwörter setzen
  • Nehmen Sie Auszüge aus dem ERP-System und übertragen Sie die Daten aus dem globalen Adressbuch nachts in Active Directory.
  • Lösen Sie das LegacyExchangeDN-Problem, das bei unserer Migration von Exchange 2003 nach Exchange 2007 aufgetreten ist. Musste eine X500-Adresse für alle Benutzer hinzufügen, die zuvor mit Exchange 2003 gearbeitet haben. Ein relativ kurzes PowerShell-Skript hat dies behoben.
  • Skriptgesteuerte Erstellung von "Gruppenpostfächern" (gemeinsam genutzte Postfächer in Exchange, in denen mehrere Benutzer Zugriff auf das Postfach haben), ein ansonsten manueller Vorgang aufgrund der Art der Daten, die wir vor dem Start benötigen. Die Einrichtung dieser Postfächer wurde stark standardisiert.
  • Es wurde ein Skript erstellt, das alle domänierten Computer durchlief, einen bestimmten Registrierungsschlüssel zurücksetzte und einen Dienst neu startete. Die Fertigstellung dauerte 18 Stunden, aber die Aufgabe wurde erledigt.

Also ja, PowerShell wird noch einige Zeit bei uns sein.

BEARBEITEN : Hinzufügen eines Codebeispiels, da es angefordert wurde

$ list = import-csv ("groupusers.csv")
$ lastseengroup = $ list [0] .group
$ ADGroupPrefix = "grp.netware".
$ ADGroupSuffix = "{redigiert - im Format von, ou = groups, dc = domain, dc = domain, dc = domain}"
Clear-Variable Mitgliederliste
Clear-Variable unbekannte Benutzer
foreach ($ eintrag in $ liste) {
    if ($ ($ entry.group) -ne $ lastseengroup) {
        echo "ist über die neue Gruppe $ ($ entry.group) gestolpert und hat Änderungen an $ lastseengroup vorgenommen"
        $ newgroup = $ ADgroupPrefix + $ lastseengroup
        $ newgroupdn = '"' +" cn = $ newgroup $ ADGroupSuffix "+ '"'
        echo "DN für $ newgroup erhalten"
        $ existinggroup = dsquery group domainroot -name $ newgroup
        if (($ existinggroup -ne $ null)) {
            dsmod group $ newgroupdn -chmbr $ memberlist
        } else {
            dsadd group $ newgroupdn -scope u -secgrp yes -members $ memberlist -desc "Gruppe aus eDirectory importiert"
        }
        Clear-Variable Mitgliederliste
    }
    $ User = get-user $ ($ entry.member) -ErrorAction SilentlyContinue
    if ($ User.isvalid) {
        $ UserDN = $ User.distinguishedname
        $ memberlist = $ memberlist + '"' +" $ UserDN "+ '"'
    } else {
        $ unknownusers = $ unknownusers + $ ($ entry.member)
    }
    $ lastseengroup = $ ($ entry.group)

}
dsadd group "cn = $ ADGroupPrefix $ lastseengroup $ ADGroupSuffix" -scope u -secgrp yes -members $ memberlist

Hierbei wird eine mit einem Perl-Skript erstellte CSV-Datei verwendet und eine Gruppe von Gruppen aktualisiert. Wenn die Gruppe bereits vorhanden ist, wird die Mitgliedschaft durch die in der Datei angegebene ersetzt. Wenn die Gruppe nicht existiert, wird sie erstellt. Dies ist eine Einweg-Synchronisierung. Auch noch nicht ganz in Produktion, aber knapp.

sysadmin1138
quelle
6
Remote-Powershell! du meinst wie ssh!?! über die Zeit!
Nick Kavadias
2
Wie führe ich Powershell-Skripte von einer Website aus? Verwendest du Powershell-Skripte als Web-Programmiersprache? Verwenden Sie PowershellASP? Führen Sie Ihre Skripte als IIS-Benutzer aus?
Quentin
17

Angesichts der Tatsache, dass die Serverprodukte von Microsoft von Anfang an PowerShell-fähig sein werden (ich glaube, die nächste Version von Exchange verfügt über die gesamte Konfiguration von PowerShell) und dass Bücher wie PowerShell in der Praxis einige großartige Möglichkeiten beschreiben, um ansonsten eintönige Aufgaben zu automatisieren, denke ich Es ist vernünftig anzunehmen, dass PowerShell noch eine Weile im Windows-Serverland weit verbreitet sein wird.

moobaa
quelle
Dieses
Ja, das ist es - aber Sie können es jetzt noch kaufen und frühzeitig auf die Inhalte zugreifen. Und es gibt Unmengen von Server-Wartungsarbeiten :)
Moobaa
4
Exchange ist seit Exchange 2007 PowerShell. OCS wird in der nächsten Version vollständig PowerShell-fähig sein. Die meisten System Center-Produkte unterstützen das Programm entweder vollständig oder werden es in den nächsten Versionen unterstützen. PowerShell geht nirgendwo hin.
Paulr
12

Ich würde den Podcast # 162 von Scott Hanselman empfehlen . Anscheinend sind alle Microsoft-Serverteams "gezwungen", PowerShell-Cmdlets bereitzustellen und eine einzige konsistente Syntax zu befolgen.

Auch Dritte wie VMWare übernehmen es

Kurz gesagt, ich bin der Meinung, dass PowerShell ab 2.0 das Ersetzen von Stapeldateien für alle Aufgaben, mit Ausnahme der einfachsten, ernsthaft zum Ziel hat.

Michael Stum
quelle
10

Zehn PowerShell-Skripte, die ich als SQL Server-Datenbankadministrator verwende (alle werden in meinem Blog beschrieben / veröffentlicht ):

  1. Überprüfen Sie den Speicherplatz auf allen SQL-Servern und laden Sie Daten in eine SQL-Tabelle
  2. Führen Sie Berechtigungsberichte auf allen SQL-Produktionsservern aus und laden Sie Daten in eine SQL-Datenbank
  3. Ermitteln Sie alle Windows Server 2003- Cluster, -Knoten und -Virtuals im Netzwerk und laden Sie sie in SQL-Tabellen
  4. Ermitteln Sie alle Datenbanken auf allen SQL-Servern, wie in SCCM definiert, und laden Sie sie in eine SQL-Tabelle
  5. Erstellen Sie eine SQL Server-Sicherungs-Scorecard, indem Sie Sicherungsinformationen für alle SQL Server in eine SQL-Tabelle laden
  6. Stellen Sie sicher, dass die TCP-Offload-Engine in Windows Server 2003 SP2 deaktiviert ist (dies ist für viele SQL Server ein Leistungsmörderer).
  7. Überprüfen Sie die Ausrichtung der Festplattenpartitionen (auch eine Leistungseinbuße, wenn die Festplatten nicht richtig ausgerichtet sind).
  8. Kopieren Sie SQL-Tabellen von einem Server auf einen anderen
  9. Rekursiv kopieren Sie alle SSIS- Pakete mithilfe eines MSDB-Speichers von einem Server auf einen anderen, einschließlich der Ordnerstruktur
  10. Erstellen Sie meinen eigenen grafischen Objektabhängigkeits-Viewer
Chad Miller
quelle
8

Welche Art von Administrationsaufgaben haben Sie damit geschrieben?

Überwachung von Anwendungen / Diensten: Rufen Sie wichtige Leistungszahlen aus (Remote-) EventLog und Stored Procedures ab und zeigen Sie sie aus einer einzelnen Batch-Datei an

Ich bin ein SQL Server DBA, zeige mir ein paar coole Dinge, die damit zu tun haben?

automssqlbackup : Tägliches Backup für MSSQL mit Rotation (täglich = inkrementell, wöchentlich + monatlich = voll; 5 tägliche, 5 wöchentliche Backups), Zippen, E-Mail-Benachrichtigung

devio
quelle
+1 für die Automatisierung des gesamten MSSQL-Sicherungsprozesses.
Andrei Rînea
Ja ... PowerShell ist Gold wert für die Automatisierung komplexer Sicherungen in SQL Server. Wir verwenden es, um stündliche Backups zu komprimieren und zu verschlüsseln und die Dateien dann zur externen Speicherung an Amazon S3 zu senden: codeblog.theg2.net/2010/02/…
Greg Bray
7

Nachdem ich in einer früheren Karriere Unix-Shell-Skripte verwendet und dann zur Windows Server-Administration gewechselt bin, kann ich sagen, dass ich Powershell wirklich sehr schätze - ich habe weder Zeit noch die Fähigkeit, zu viel arkane Syntax zu lernen, und war angenehm überrascht darüber von Powershell-Skripten kann mit sehr einfacher Sprache geschrieben werden ... nimm das, was es wert ist, wie ich es gewohnt war, ksh !!

Ich gehe davon aus, dass es noch lange dauern wird.

WiredNut
quelle
7

Ich fand das cool: Mit SQL Server 2008 erhalten Sie neue PowerShell-Erweiterungen, mit denen Sie wie mit Ihrem lokalen Dateisystem oder Ihrer Registrierung in SQL-Datenbanken navigieren können.

Nach der Installation der SQL Server Client-Tools können Sie eine beliebige Datenbank in PowerShell öffnen (über das Kontextmenü mit der rechten Maustaste) und objektorientiert damit spielen:

PS SQLSERVER:\SQL\MyServer\MyInstance\Databases\ExampleDB\>function prompt {"PS >"}
PS >cd tables
PS >dir

SCHEMA          NAME         CREATED
------          ----         -------
dbo             MyTable      25/06/2009 17:02

PS > dir | format-table name, columns, rowcount, parent

NAME            COLUMNS      ROWCOUNT      PARENT
----            -------      --------      ------
MyTable         {Id, Name}   0             {ExampleDB}

PS >$myTable = dir | where {$_.Name -eq "MyTable"}
PS >$myTable.Script()

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[MyTable](
[Id] [int] IDENTITY(1,1) NOT NULL
[Name] [nText] NOT NULL
) ON [PRIMARY]

PS >set-location \SQL\AnotherServer\Default
PS >cd databases\Northwind\tables
PS >$myTables = dir | where {$_.Rowcount -gt 100 -and $_.HasIndex -eq 1}
PS >$myTables.Count

8

PS >foreach ($table in $tables) {$table.RebuildIndexes(90)}

Beachten Sie, dass die erste Zeile einfach die Eingabeaufforderung ändert, sodass sie nicht mehr so ​​lang ist.

Ansonsten ist es hoffentlich selbstverständlich, was hier los ist :)

Lex
quelle
+1 Wow, das ist ziemlich nützlich. Vielen Dank!
Jftuga
5

SQL Server 2008 verfügt jetzt über PowerShell-Kontextoptionen in Management Studio, sodass es von Exchange nicht mehr unterstützt wird. Stellen Sie es sich auch als DOS-Ersatz vor, da MS genau das dachte, weil sie die Sicherheit von DOS aufgrund von Abwärtskompatibilitätsproblemen nicht verbessern können. Sie haben also gerade etwas Neues erstellt und wammo, Problem gelöst!

SQLGuyChuck
quelle
4

Auch ich bin ein DBA und langjähriger Scripter, der auf DOS-Batchdateien zurückgreift, V3.3! Weiter zu VB Script, aber PS ist sehr mächtig. Schauen Sie sich an - Entschuldigung, ich kann den Link nicht posten, da ich ein neuer Benutzer bin. Hab das von Otto Helweg's Blog bekommen. Es ist ein billiges und fröhliches Softwareinventur-Tool.

  • 1- Ruft die Liste der abzufragenden Computer aus einer Datenbanktabelle ab
  • 2- Fügt das aktuelle Datum und die Uhrzeit zum Ergebnis hinzu
  • 3- Zeichnet die Prüfungsergebnisse in einer Datenbank auf

Beispiel für ein PowerShell-Skript:

# Open the database connection
$dbConn = new-object System.Data.SqlClient.SqlConnection "server=kcdb;database=Inventory;Integrated Security=sspi"
$dbConn.Open()
$sqlQuery = $dbConn.CreateCommand()

# Get all known computers
$sqlQuery.CommandText = "select * from Inventory..Computers"
$reader = $sqlQuery.ExecuteReader()
$computersToQuery = @()
while ($reader.Read()) {
   $computersToQuery += $reader["Computer"]
}

# Close the database connection
$dbConn.Close()

$softwareInventory = @{}
foreach ($computer in $computersToQuery) {
   $psinfoOutput = ./psinfo.exe -s Applications \\$computer

   $foundSoftwareInventory = 0
   $computerName = ""
   foreach ($item in $psinfoOutput) {
      if ($foundSoftwareInventory -eq 1) {
         # Force the results to a string
         # Remove any single quotes which interfere with T-SQL statements
         # Load the result into a hash whereby removing any duplicates
         [string]$softwareInventory[$computerName][$item.Replace("'","")] = ""
      }

      if ($item -like "System information for *") {
         $computerName = $item.Split("\")[2].TrimEnd(":")
      } elseif ($item -eq "Applications:") {
         $foundSoftwareInventory = 1
         $softwareInventory[$computerName] = @{}
      }
   }
}

$dbConn = new-object System.Data.SqlClient.SqlConnection "server=kcdb;database=Inventory;Integrated Security=sspi"
$dbConn.Open()
$sqlQuery = $dbConn.CreateCommand()

foreach ($computer in $softwareInventory.Keys) {
   foreach ($softwareItem in $softwareInventory[$computer].Keys) {
      "Loading-" + $computer + ":" + $softwareItem

      # Try an Update then an Insert 
      trap {
         $sqlQuery.CommandText = "update Inventory..SoftwareInventory set AuditDate = getdate() where  Computer = '" + $computer + "' and Software = '" + $softwareItem + "'"
         $result = $sqlQuery.ExecuteNonQuery()
         continue
      }

      $sqlQuery.CommandText = "insert into Inventory..SoftwareInventory (Computer,Software,AuditDate) values ('" + $computer + "','" + $softwareItem + "',getdate())"
      $result = $sqlQuery.ExecuteNonQuery()
   }
}

$dbConn.Close()

Dave J

Dave Jackson
quelle
3

Die folgenden Aufgaben werden von meinem Team regelmäßig mit PowerShell ausgeführt

  • Listen Sie den verfügbaren Speicher auf allen Knoten unserer Hyper-V-Cluster auf.
  • Verwalten Sie einen Netapp-Filer
  • Stellen Sie neue virtuelle Hyper-V-Maschinen bereit
  • Schreiben und Lesen von SharePoint-Listen programmgesteuert

Jeden Tag habe ich eine PS-Eingabeaufforderung, die ich für einmalige Aufgaben verwende, für die ich CMD verwendet habe.

Hier einige Codebeispiele zum Lesen von Sharepoint-Listen. Ich verwende Webservices von Sharepoint und das neue Cmdlet "New-WebServiceProxy" in PowerShell V2.0

$url = "http://server/sites/site/_vti_bin/lists.asmx"
$listWebService = new-webServiceProxy -uri $url -UseDefaultCredential
$listName = "MyList"
$viewGuid = $null
$query= $null
$viewFields = $null
$numRowsReturned = 20000
$queryOptions = $null
$result = $listWebService.GetListItems($listName,$ViewGuid,$query,$viewFields,$numRowsReturned,$queryOptions,$null)

Oisin Grehan hat einen großartigen Blogbeitrag über die Verwendung von Sharepoint-Webdiensten verfasst , auf dessen Basis ich alle meine Funktionen erstellt habe. Er selbst hat ein fantastisches Skript new-webservice.ps1, das Sie verwenden können, wenn Sie immer noch PowerShell V1 verwenden.

Hier ist auch die Basisfunktion, mit der ich den verfügbaren Speicher auf den Knoten in meinem Cluster abgerufen habe

Function Get-AvailableMemory {
param
(
[string[]]
$servers
)
BEGIN {
$query = "select AvailableBytes,__SERVER from Win32_PerfRawData_PerfOS_Memory"

$availableMemory = @{
                    Name="AvailableMemory";
                    Expression = {[math]::round($_.AvailableBytes/1gb,2)}
                    }
$serverName = @{  
                Name ="Server";
                Expression = {$_."__SERVER"}                                      
               }
}
PROCESS {
foreach ($server in $servers){
    get-wmiobject -query $query -computer $server |
    select-object $availableMemory, $serverName
    }
}

END {}    

}
Andy Schneider
quelle
Hast du einen Beispielcode, den du teilen möchtest? Ich interessiere mich besonders für das Lesen und Schreiben von SharePoint-Listen.
Brian
2

Ich habe PowerShell für ein kleines Projekt bei der Arbeit ausprobiert - eine tägliche Migration einer Teilmenge von ~ 600 Benutzern und ~ 200 Gruppen aus dem Unternehmens- AD auf ein altes UNIX-System unter Verwendung von CSV- ähnlichen Dateien. Mir wurde ein 500-Zeilen- VBScript- Skript (!) Angeboten , das eine einzelne Gruppe und ihre Benutzer als Ausgangspunkt heranzog.

Es stellte sich heraus, dass ein ~ 20-zeiliges PowerShell-Skript die ganze Sache erledigen könnte ...

Als * NIX-Benutzer (Server- und Clientseite) war ich von PowerShell sehr positiv überrascht. Selbst wenn Sie nur eine kleine Teilmenge von Befehlen kennen, können Sie damit wirklich mächtig arbeiten. Ich brauche nur einen SSH (-ähnlichen) Fernzugriff ...

Peter Mortensen
quelle
Lookup Psremoting
Sam
1

Wie kann ich es nicht benutzen? Alle Microsoft-Serveranwendungen, die herauskommen oder aktualisiert werden, werden jetzt mit Powershell verwaltet. Einige mehr oder weniger ärgerliche Benutzeroberflächen- / Verwaltungskonsolen sind dann auf diesem Kern aufgebaut, der oft sehr langsam ist, und, wie jemand betonte, es fehlen Funktionen, die verfügbar sind. Ich kann also nicht sagen, dass wir tatsächlich eine große Auswahl haben ^

Oskar Duveborn
quelle
Schauen Sie sich dieses kleine Powershell-Skript an, um Ihre Baugruppen zu ngen und alle Ihre Powershell-basierten Konsolen zu beschleunigen
Jesse Weigert
1

Powershell ist nicht perfekt, aber wenn du es benutzt hast, weißt du, dass es ziemlich cool ist. Es ist ziemlich cool, Zugriff auf die gesamte .net-Bibliothek und die integrierten Cmdlets zu haben (und eigene Cmdlets mit PS in 2.0 zu erstellen).

Das einzige, was ich vermisse, ist eine gute IDE dafür, von der ich mir sicher bin, dass sie eines Tages von MS stammen wird. Im Moment benutze ich Ideras PowerShell Plus und Adminscripteditor, die das Debuggen erlauben und ziemlich cool sind.

Ich konnte mich ziemlich gut von VB entwöhnen.

Mein bisher größtes Projekt mit Posh ist die Verwendung von "PowershellASP", um eine einfache Webseite zu erstellen, auf der Powershell-Befehle ausgeführt und VMware-Host- und VM-Informationen von mehr als einem Dutzend VMWare ESXi-Hosts (kostenlos) abgerufen und in HTML-Tabellen angezeigt werden. Ich habe dies getan, weil es mit der kostenlosen VMWare ESXi und ohne virtuelles Zentrum keine andere Möglichkeit gibt, einen Echtzeitüberblick über alle meine VMs im Unternehmen zu erhalten. PowershellASP ist ein kostenloser Parser von Drittanbietern, der für IIS geschrieben wurde und von MS nicht unterstützt wird. Daher kann es derzeit einige eingeschränkte Aufgaben ausführen, und die Dokumentation ist recht spärlich.


quelle
Es gibt PowerGUI, und in PowerGui verwenden ScriptEditor.exe, ich kann mir nicht vorstellen, wie ich ohne das leben kann ...
Nicolas Dorier
Powershell 2 enthält eine großartige Powershell ISE (Integrated Script Editor). Der CTP 3 ist verfügbar, RTM ist ab sofort erhältlich und wird im Oktober 2009 endgültig veröffentlicht.
Precipitous
1

Ich habe eine ganze Reihe von Verwaltungs- / Inventarskripten, die AD nach verschiedenen Dingen durchsuchen und diese über WMI nach wichtigen Statistiken wie Freigaben auf dem Server, Speicherplatz, verwendetem Speicherplatz usw. abfragen.

Allgemeine Skripte:

  1. Holen Sie sich freien / belegten Speicherplatz, RAM usw.
  2. Fragen Sie WMI nach BIOS-Informationen, Servermodell usw. ab.
  3. Überprüfen Sie die AV-Version und stellen Sie sicher, dass bestimmte Registrierungseinträge vorhanden sind
  4. Freigaben auf Windows-Servern überwachen

Benutzerskripte:

  1. Listen Sie auf, wie AD alle Benutzer erfasst und zu welchen Gruppen sie gehören, und schreiben Sie dann in Excel oder CSV
  2. Finde aktuell angemeldete Benutzer über TS und auf der Konsole

Ich habe eine, die alle VMWare-Gastcomputer auf meinen ESX-Servern auflistet

Ich habe ein Skript, das Dateien nach x Tagen erfasst und sicher löscht.

Grundsätzlich kann ich etwa 200 Zeilen VBScript und 10 Zeilen PowerShell verwenden. Sie können auch Dinge tun, die Sie in VBScript einfach nicht können oder die Sie nicht gut können - wie das Senden von E-Mails mit Anhängen -, die ich regelmäßig tue, um mir die Ergebnisse meiner Skripte zu senden. Sie können ausserdem aussagekräftige und eindeutige Einträge mit benutzerdefinierten Dienstnamen und Ereignis-IDs in das Ereignisprotokoll schreiben.

Das ist es, woran ich auf Anhieb denken kann. Mein bevorzugtes Werkzeug ist jetzt PowerShell. Es macht das Leben einfacher.

Grundsätzlich ist es für einen Systemadministrator genauso nützlich wie für einen Unix-Administrator Bash-Scripting.

Zypher
quelle
0

Ich habe nach Poweshell gesucht, um unsere Client-Batch-Skripte zu ersetzen - Ausführen von Programmen, Anmeldeskripten usw.

Aber festgestellt, dass die Anmeldezeit um mindestens 10 Sekunden verlängert wurde - mit all den "Verbesserungen". Also blieb ich bei dem, was wir benutzten.

Wannen
quelle
Es ist nicht das schnellste Ding der Welt, aber es kann so gut wie alles. Wenn Sie nur ein paar Laufwerke zuordnen müssen, sind Batch-Skripte viel schneller.
sysadmin1138
0

Da ich kein .NET-Entwickler bin, kann ich nur eingeschränkt alle .NET-bezogenen Extras verwenden, die Sie mit PS verwenden können. Als Exchange-Administrator (unter anderem) ist die PowerShell-Integration für Exchange 2007 jedoch FANTASTISCH. Endlich habe ich eine zuverlässige Skript-Engine für mein Mail-System. Bisher habe ich es geschafft, mir monatliche Statistiken für alle Postfächer zu senden, je nach Tageszeit die verschiedenen E-Mail-Adressen anzupassen, automatisch Berechtigungen für Öffentliche Ordner zu erstellen und zuzuweisen und Benutzer zwischen unseren beiden Postfach-DBs auszutauschen . Die andere coole Sache aus der Sicht von Ex07 ist, dass Sie, nachdem Sie irgendetwas in der GUI getan haben, die relevanten PowerShell-Befehle für das bekommen, was Sie gerade getan haben. Wenn Sie diese kopieren, erhalten Sie möglicherweise eine Reihe von PS-Skripten, mit denen Sie Ihre Exchange-Umgebung von Grund auf neu erstellen können.

RainyRat
quelle
0

Automatisieren bestimmter Dinge mit Serverüberprüfungen, bei denen ich arbeite (Sammeln grundlegender Informationen von WMI und Sammeln von Fehlern und Warnungen aus den Ereignisprotokollen).

Der Umgang mit Ereignisprotokollen ist fantastisch.

Ich habe kürzlich ein Skript geschrieben, um das Popup-Fenster für die automatische Aktualisierung zu deaktivieren, das Foxit Reader standardmäßig in einer Domäne aktiviert hat, in der das Skript ausgeführt wird. Es ruft eine Liste von Computern aus AD ab und testet dann, ob es aktiv ist. Dann ändert es eine 1 in eine 0.

Eines habe ich vergessen!

Sie haben so ziemlich vollen Zugriff auf die .NET-Bibliotheken. Es ist ein bisschen mühsam, wirklich komplizierte Sachen damit zu machen, aber wenn Sie das Bedürfnis haben, ist es für Sie da.

nonades
quelle
0

Wir verwenden es für einige Administrationsaufgaben, da es sich hauptsächlich um einen Microsoft-Shop handelt. Einige Skripte sind einfach, wie das Aufräumen alter Dateien oder das Defragmentieren von Computern und das Aufzeichnen der Ergebnisse. Ein Skript überprüft Computer hauptsächlich mit WMI und zeichnet die Ergebnisse in einer Datenbank auf. Es werden Informationen wie Hardware (CPU, RAM, Laufwerke usw.), Netzwerkinformationen, lokale Benutzer, installierte Software und Profilinformationen abgerufen. Es gibt einen, der einen Webdienst zum Senden von E-Mails aufruft. Ich denke, dass es in Zukunft den Rest der VBScript- Skripte ersetzen wird, die noch verwendet werden. Wir verwenden es noch nicht für Exchange- oder SQL Server-Aufgaben.

Ich freue mich auf die nächste Version, die Unterstützung für Hintergrundjobs, Transaktionen, bessere Ausnahmebehandlung, eine neue ISE (Integrated Scripting Environment), besseres Debugging usw. bieten wird.

Bratch
quelle
0

Meine Windows-Administratoren verwenden PowerShell noch nicht. Sie haben alle davon gehört, aber sie haben sich nicht die Zeit genommen, sich damit vertraut zu machen.

Ich beschloss, es mir selbst anzusehen. Aus einem Unix-Shell-Hintergrund kommend dachte ich, dass Windows endlich eine echte Shell-Programmierumgebung haben muss. Ich denke, dass Microsoft einige Dinge mit PowerShell gut gemacht hat und einige Dinge nicht so gut.

Positiv zu vermerken ist die Verwendung von Objekten als Vermittler zwischen Cmdlets in PowerShell. Dies verleiht PowerShell eine Leistungsstufe, die textbasiertes Scripting umgehen muss, um mit der Arbeit zu beginnen.

Negativ ist, dass sie die meisten Unix-Shell-Befehle nicht wirklich nutzen. Daher ist die Lernkurve unnötig steil und es ist nicht einfach, von Unix zu PowerShell oder umgekehrt zu wechseln. Am häufigsten definieren sie Aliase für einige PowerShell-Cmdlets, z. B. ls als Alias ​​für Get-ChildItem, wobei sich alle Befehlszeilenoptionen unterscheiden.

Nur meine zwei Cent ...

user7286
quelle
0

Dies ist eher eine Antwort für Entwickler, aber es ist eine reale Welt, und wir werden dies irgendwann in den nächsten Monaten testen. Ich fange an, PowerShell zu lernen, um Skripte zu schreiben, mit denen SQL Server-Aufgaben in unsere kontinuierliche Integrationsumgebung integriert werden können. Die fortlaufenden Integrationsskripte werden hauptsächlich von NAnt und MSBuild über JetBrains TeamCity ausgeführt .

Darüber hinaus möchte ich auf PowerShell als meine primäre Windows-Befehlsshell für allgemeine Zwecke und insbesondere für SQL Server-Datenbankverwaltungsaufgaben umsteigen.

Entschuldigung, ich habe noch keine Codebeispiele zum Teilen, da ich noch lerne! Ich werde gerne welche posten, wenn ich das tue :)

Hier ist ein Code-Beispiel für eine Zeile, mit dem ich gerade eine andere Frage von dir beantwortet habe :) Aber hey, für das Wiki ...

Dies listet die installierten Hotfixes auf:

Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix
Squillman
quelle
Hurra für Powershell, schade, dass es nicht standardmäßig auf einem 2003-Server installiert ist. Der Registrierungsspeicherort hat jedoch geholfen!
Nick Kavadias
0

Es ist zwar nicht die einfachste Skriptsprache (solide Erfahrung mit Pipes vorausgesetzt) ​​und verfügt über einen eigenen Hebel an Seltsamkeiten (gib mir ein einfaches sed- ähnliches Ding !!), aber ich finde PowerShell ziemlich mächtig. Nicht auf dem Niveau von Bash oder anderen Unix-Shells, aber dennoch.

Ich verwende es, um einige Datenbankexporte und -importe mit E-Mail-Warnungen zu überwachen, falls etwas schief geht, und um einige routinemäßige Batch-Vorgänge durchzuführen.

Es ist sicherlich schon meine primäre Windows-Shell, obwohl es nicht wirklich das Zeug "schreibe weniger, mache mehr" ist. Die Ausführlichkeit (und die .NET-Vererbung) von PowerShell spielen dagegen.

Berzemus
quelle
0

PowerShell Version 1.0 war in vielerlei Hinsicht stark eingeschränkt, aber Version 2.0 kommt gut voran. Im Vergleich zu Batch-Skripten ist es viel leistungsfähiger. Ich benutze es nicht wirklich als Shell, nur für Skripte, also ist meine Erfahrung entsprechend gefärbt. Ich mag die Syntax nicht wirklich ( -eqvs ==, -gtvs >, etc.), aber ich schätze es, in .NET vorbeizukommen, wenn ich etwas Seltsames tun muss. Ich denke, dass es mit Version 3.0 großartig wird. Im Moment würde ich es fest in die Kategorie "erledigt die Arbeit" setzen.

Ich benutze es hauptsächlich zur Automatisierung der Bereitstellung von Code. Dies ist ein Bereich, in dem es darum geht, etwas in C # zu erstellen. Die Shell-bezogenen Operationen wie das rekursive Kopieren von Verzeichnissen und andere Dinge, die Bash-Skripter seit Jahren für selbstverständlich halten, machen die Dinge so viel einfacher.

Peter Mortensen
quelle