web-dev-qa-db-fra.com

PowerShell? L'utilisez-vous? Pouvez-vous me montrer des choses d'administration de système cool que je peux faire avec ça?

Je continue à lire partout qui PowerShell est la voie du futur. Quand il a été publié pour la première fois, j'ai fait un tas de laboratoires virtuels, mais depuis lors, je ne l'ai toujours pas utilisé dans un environnement de production. Je sais que la journée viendra quand je traite avec le système d'exploitation où il est déjà installé, je veux donc être prêt.

Je veux savoir:

  1. L'utilisez-vous?
  2. Quel est votre processus "bootstrapping" pour utiliser PowerShell?
  3. Quel type de tâches d'administration système avez-vous scripté avec elle?
  4. Je suis un administrateur de base de données SQL Server. Quelles sont les choses cool à faire avec ça?

Il semble que tout le monde accepte que Microsoft pousse cela dur, mais personne ne l'utilise encore. Je veux entendre des administrateurs système qui l'utilisent pour faire des tâches quotidiennes et partager certains échantillons de code.

45
Nick Kavadias

Microsoft fait tout ce qui est possible pour rendre PowerShell le choix des utilisateurs de puissance et des auteurs d'automatisation partout. Finies sont les jours de compilation de code dans .net afin de faire la même chose, maintenant vous avez juste besoin de NotePad.exe et de Google. Nous sommes de grands fans dans le bureau, d'autant plus que la console de gestion d'Exchange 2007 n'inclut pas tout ce que vous pouvez faire à PowerShell. Microsoft n'a délibérément pas réussi à mettre en œuvre des éléments qui ne se font que dans un grand moment, plus facile à développer de cette façon, ce que la carrément force son utilisation si vous avez quelque chose qui ressemble à un environnement complexe.

Gestion de la nouvelle génération de produits de Microsoft (Win7, Windows Server 2008, Exchange 2007/2010, SQL Server 2008) Tous ont des crochets de Powershell très riches. Une fois que Remote PowerShell (PowerShell 2.0 IIRC) est déployé avec Server 2008 R2, il deviendra encore plus utile pour les écrivains automatismes.

Ce que nous avons fait avec elle:

  • Créez une page Web pour déléguer certaines tâches d'administration pour aider les utilisateurs d'assistance. La page Web incendie les commandes qui sont exécutées dans PowerShell. Choses qu'il fait:
    • Créez et supprimez des comptes d'utilisateurs, y compris des boîtes aux lettres Exchange 2007 et des annuaires à domicile
    • Déverrouille des comptes verrouillés
    • Créer/Supprimer des groupes
    • Ajouter/Supprimer les utilisateurs des groupes
    • Déplacez les utilisateurs entre messages-magasins
    • Définir des mots de passe
  • Prenez des extraits du ERP System et appuyez sur les données Global-Adresse-Book dans Active Directory Nightly.
  • Résolvez le problème de legacyExchangedn qui a reculé avec notre Exchange 2003 pour échanger des migrations de 2007. J'ai dû ajouter une adresse X500 à tous ceux qui étaient à l'avance 2003. Un script assez court PowerShell a fixé.
  • Création scriptée de "boîtes aux lettres de groupe" (boîtes aux lettres partagées en échange dans lesquelles plusieurs utilisateurs ont accès à la boîte aux lettres), un processus manuel autrement en raison de la nature des données dont nous avons besoin avant de partir. Il a grandement normalisé la configuration de ces boîtes aux lettres.
  • Créé un script qui parcourait toutes les machines domaines réinitialisant une clé de registre spécifique et redémarrant un service. Il a fallu 18 heures pour compléter, mais cela a fait le travail.

Alors oui, PowerShell va être avec nous pendant un certain temps.

[~ # ~] éditer [~ # ~ ~]: Ajout d'un échantillon de code, car il a été demandé

$ lister = importer-csv ("groupusers.csv") [.____] $.] $ lastseengroup = $ list [0] .group [.____] $ adgroupprefix = "GRP.Netware." [.____] "{expurgé - au format de, ou = groupes, dc = domaine, dc = domaine, dc = domaine}" [ foreach ($ entrée en $) {
 si ($ ($ ($ ($ entrée.group) -ne $ changeengroup) {[ à $ chantenengroup "[.____] $ newgroup = $ adgroupprefix + $ anestengroup 
 $ newgroupdn = '"' + "cn = $ nouveaugroup $ adgroupsuffix" + '" $ nouveaugroup "
 $ existantgroup = dsquery group Domainroot -Name $ NEWGROUP [. ____ ____]}} else {[.____] {[ Membres maticules [.____]} [.____] $ User = Get-User $ ($ entrée.member) -ErrorAction silenciement 
 Si ($ utilisateur.isvalid) {[.] $ userdn = $ User.distinguisheisheyName [.____] $ Memberlist = $ membre de la liste + '"' +" $ userdn "+ '"' '[.____]}}}} {€. ) 
} [.____] $.] $ chanezeengroup = $ ($ entrée.group) 
 [.____]} [ -Scope u -secgrp Oui -Members $ Membres

Cela prend un fichier CSV créé avec un script PERL et met à jour un ensemble de groupes. Si le groupe existe déjà, il remplace l'appartenance à celle spécifiée dans le fichier. Si le groupe n'existe pas, cela le crée. Ceci est une synchronisation à sens unique. En outre, pas tout à fait en production encore, mais proche.

34
sysadmin1138

Étant donné que les produits du serveur de Microsoft seront activés PowerShell à partir du départ (je crois que la prochaine version de Exchange a Tout Config disponible via PowerShell) et Ces livres comme - PowerShell dans la pratique Décrivez de grandes façons d'automatiser des tâches monotonnes autrement monotones, je pense qu'il est raisonnable de suggérer que PowerShell sera une technologie répandue dans Windows Serverland pendant un moment.

17
moobaa

Dix scripts PowerShell j'utiliser comme un administrateur de base de données SQL Server (tous sont décrits/affichées sur mon blog ):

  1. Vérifiez l'espace disque sur tous les serveurs SQL et les données de charge à une table SQL
  2. Exécuter les autorisations des rapports sur tous les serveurs SQL de production et les données de charge à une base de données SQL
  3. Découvrez tous Windows Server 20 clusters, noeuds et virtuals sur le réseau et la charge aux tables SQL
  4. Découvrez toutes les bases de données sur tous les serveurs SQL tels que définis dans SCCM et charge à une table SQL
  5. Créer une carte de pointage de sauvegarde SQL Server en chargeant les informations de sauvegarde sur tous les serveurs SQL à une table SQL
  6. Vérifiez que TCP Offload Engine est désactivé dans Windows Server 2003 SP2 (ce qui est un tueur de performances pour de nombreux serveurs SQL)
  7. Vérifiez l'alignement de la partition du disque (également un tueur de performance si les disques sont alignés de manière incorrecte)
  8. Copier les tables SQL d'un serveur à un autre
  9. Recursivley copier tous SSIS paquets en utilisant un MSDB de stockage d'un serveur à un autre, y compris la structure du dossier
  10. Créer mon propre visionneuse de dépendance objet graphique
10
Chad Miller

Quel type de tâches administratives avez-vous scripté avec elle?

suivi des applications/des services: Obtenez des numéros de performances clés de (distant) EventLog et des procédures stockées et les affiche à partir d'un seul fichier de commandes

Je suis un dba SQL Server, montre-moi des choses cool à faire avec ça?

Automssqlbackup : Sauvegarde quotidienne pour MSSQL avec rotation (quotidien = incrémental, hebdomadaire + mensuel = complet; garder 5 sauvegardes quotidiennes), zipping, notification par courrier électronique

8
devio

Après avoir utilisé des scripts de shell UNIX dans une carrière précédente, puis vous déplaçant à Windows Server Administration, je peux dire que je suis vraiment, apprécie vraiment PowerShell - je n'ai pas le temps ni la capacité d'apprendre trop de syntaxe d'arcanes et a été agréablement surpris que beaucoup des scripts PowerShell peuvent être écrits avec une langue très directe ... prenez que c'est ce que sa valeur telle que j'ai été habituée à KSH !!

Je prédis que ce sera là depuis longtemps.

7
WiredNut

Je pensais que c'était cool: avec SQL Server 2008, vous obtenez de nouvelles extensions PowerShell qui vous permettent de naviguer dans les bases de données SQL, telles que votre système de fichiers local ou votre registre.

Après avoir installé les outils client SQL Server, vous pouvez ouvrir n'importe quelle base de données dans PowerShell (via le menu contextuel de la souris sur clic) et jouer avec elle de manière orientée objet:

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)}

NOTE La première ligne change simplement l'invite afin que ce ne soit pas si longtemps.

Espérons que, en dehors de cela, c'est évident ce qui se passe ici :)

7
Lex

SQL Server 2008 propose désormais des options de contexte PowerShell dans Management Studio, plus que l'échange l'embrasse. En outre, pensez-y comme le remplacement de DOS, comme cela est à peu près ce que la SP pensait, car elles ne peuvent tout simplement pas améliorer la sécurité des DOS pour les problèmes de compatibilité à l'envers, ils ont donc créé quelque chose de nouveau et de Wammo, résolu!

5
SQLGuyChuck

Les tâches suivantes sont effectuées par mon équipe très régulièrement avec PowerShell

  • énumérez la mémoire disponible sur tous les nœuds de nos clusters Hyper-V.
  • Gérer un déposer NetApp
  • Provision de nouvelles machines virtuelles Hyper-V
  • Écrire et lire des listes SharePoint Programmatiquement

Du jour après jour, j'ai une invite PS, tout le temps et l'utilisez pour toutes les tâches que j'ai utilisées pour utiliser CMD.

Voici quelques échantillons de code pour lire des listes SharePoint. J'utilise des services Web de SharePoint et de la nouvelle cmdlet "New-WebServiceProxy" à 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 Grahan a un Super blog post sur l'utilisation de SharePoint Web Services que j'ai utilisé comme base pour créer toutes mes fonctions. Il Evens a un script génial nouveau-webservice.ps1 que vous pouvez utiliser si vous utilisez toujours PowerShell V1.

En outre, voici la fonction de base que j'ai utilisée pour obtenir la mémoire disponible sur les nœuds de mon cluster.

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 {}    

}
3
Andy Schneider

J'ai essayé PowerShell pour un petit projet au travail - une migration quotidienne d'un sous-ensemble d'environ 600 utilisateurs et ~ 200 groupes de l'entreprise [~ # ~ # ~ # ~] à un ancien système UNIX Utilisation CSV - Comme des fichiers. On m'a proposé un script de 500 lignes vbscript (!) Qui a sorti un groupe unique et ses utilisateurs comme point de départ.

Il s'est avéré qu'un script PowerShell à 20 lignes pourrait faire tout le monde ...

En tant qu'utilisateur * NIX (serveur et côté client), j'ai été très agréablement surpris de PowerShell. Même si vous connaissez simplement un petit sous-ensemble de commandes, vous pouvez faire un travail vraiment puissant avec elle. J'ai juste besoin [~ # ~] ssh [~ # ~ ~] (- J'aime) l'accès à distance ...

2
Morten Siebuhr

Comment puis-je ne pas l'utiliser? Toutes les applications Microsoft Server Sortir/étant mis à niveau sont maintenant gérées à l'aide de PowerShell. Un peu plus ou moins de console d'assurance-emploi/de gestion gênant est ensuite conçu sur le dessus de ce noyau qui est souvent lent et que quelqu'un a souligné, manque de fonctionnalités disponibles ... Donc je ne peux pas dire que nous avons beaucoup de choix réellement ^ ^

1
Oskar Duveborn

PowerShell n'est pas parfait mais si vous l'avez utilisé, vous savez que c'est assez cool. Avoir accès à l'ensemble de la bibliothèque .NET, ainsi que des cmdlets intégrés (et créez vos propres cmdlets en utilisant PS in 2.0), c'est assez cool.

La seule chose que je pense manquante est une bonne IDE pour cela que je suis sûr que je viendrai de la SP un jour. En ce moment, j'utilise l'Idera's PowerShell Plus et Adminscripteur qui permettent de déboguer et sont assez cool .

J'ai pu me sevrer de VB assez bien.

Mon projet le plus important à ce jour avec POSH est d'utiliser "PowerShellasp" pour créer une page Web de base qui exécute PowerShell Commandes et tire VMware Host and VM Informations de My Plus d'une douzaine de VMware ESXI (gratuit) héberge et les affiche dans des tables HTML. Je l'ai fait parce que avec le GRATUIT VMware Esxi et aucun centre virtuel, il n'y a pas d'autre moyen d'obtenir une vue d'ensemble en temps réel de tous mes ordinateurs virtuels de la société. PowerShellasp est un analyseur 3ème parti gratuit écrit pour IIS et non pris en charge par MS. Il peut donc faire des choses limitées en ce moment et la documentation est assez clairsive.

1
Peteski

J'ai un tas de scripts de gestion/inventaire qui recherche par AD pour des choses differnt, et les requêtes sur WMI pour les statistiques vitales telles que les actions sur le serveur, l'espace disque, l'espace disque utilisé, etc.

Scripts généraux:

  1. Get Free/espace disque utilisé, RAM, etc.
  2. Requête WMI pour informations sur le BIOS, le modèle de marque de serveur, etc.
  3. Vérifiez la version AV et assurez-vous que certaines entrées de registre sont là
  4. Actions d'audit sur les serveurs Windows

Scripts de l'utilisateur:

  1. Énumérer AD saisissant tous les utilisateurs, et quels groupes ils appartiennent alors écrire à Excel ou CSV
  2. Trouver actuellement les utilisateurs connectés via TS et sur la console

J'ai une qui énumère toutes les machines invitées VMWare ESX sur mes serveurs

J'ai un script qui récupère les fichiers après x jours et les supprime en toute sécurité.

En fait, je peux faire ce que a pris environ 200 lignes de VBScript et de le faire dans 10 de PowerShell. Vous pouvez aussi faire des choses que vous ne pouvez pas faire ou bien faire dans VBScript - comme envoyer des emails avec des pièces jointes - que je fais régulièrement pour me faire parvenir les résultats de mes scripts. Aussi, vous pouvez écrire des entrées significatives et uniques dans le journal des événements avec des noms de services personnalisés et ID d'événement.

Voilà ce que je peux penser à du haut de ma tête. Mon outil de choix est PowerShell maintenant, il est tout simplement la vie plus facile.

Fondamentalement, il est à peu près aussi utile à un admininistrator du système comme les scripts Bash est à un administrateur Unix.

1
Zypher

Mes administrateurs Windows n'utilisent pas encore PowerShell. Ils ont tous entendu parler de cela, mais ils n'ont pas pris le temps de se familiariser.

J'ai décidé de me regarder moi-même. En venant d'une coque unix, je pensais que les fenêtres doivent enfin avoir un véritable environnement de programmation de shell. Je pense que Microsoft a fait certaines choses bien avec PowerShell et quelque chose pas si bien.

Sur le bon côté se trouve leur utilisation d'objets comme intermédiaire entre les cmdlets de PowerShell. Cela apporte un niveau de pouvoir à PowerShell que les scripts basés sur des textes doivent pirater pour se rendre au travail.

Sur le côté négatif, ils n'utilisent vraiment pas une grande partie des commandes de shell UNIX. La courbe d'apprentissage est donc inutilement raide et n'aide pas les gens à se déplacer facilement d'UNIX à PowerShell ou inversement. La plupart qu'ils font est de définir des alias pour certains des cmdlets PowerShell tels que LS ALIATIONS GET-Childitem avec tous les commutateurs de ligne de commande étant différents.

Juste mes deux cents...

0
user7286

Automatiser certaines choses avec des contrôles de serveur où je travaille (collecte des informations de base de WMI et de rassembler des erreurs et des avertissements des journaux des événements).

Il s'agit de la gestion des journaux d'événements est génial.

J'ai récemment écrit un script pour désactiver la fenêtre de mise à jour automatique que Foxit Reader a activé par défaut dans un domaine sur lequel le script est exécuté. Il tire une liste d'ordinateurs à partir d'une annonce puis des tests pour voir si c'est le cas, puis il change 1 à un 0.

Une chose que j'ai oubliée!

Vous avez à peu près un accès complet aux bibliothèques .NET. C'est un peu douloureux de faire des choses vraiment compliquées avec elle, mais si vous avez le besoin, c'est là pour vous.

0
nonades

Ne pas être un développeur .NET, j'ai une utilisation limitée pour toutes les goodies liées à .NET que PS vous permet d'utiliser. Cependant, être un administrateur d'échange (entre autres), l'intégration PowerShell pour Exchange 2007 est géniale. J'ai enfin un moteur de script fiable pour mon système de messagerie; Jusqu'à présent, je l'ai envoyé des statistiques mensuelles sur les boîtes aux lettres de tous, en ajustant l'OMS Diverses adresses électroniques, en fonction de l'heure de la journée, de la création et de l'attribution automatiquement des autorisations sur des dossiers publics et des utilisateurs d'équilibrage de chargement entre nos deux DBS de boîtes de courrier. . L'autre chose cool du point de vue de l'EX07 est que, après quoi que vous fassiez quelque chose dans l'interface graphique, cela vous présente les commandes PowerShell pertinentes pour ce que vous venez de faire. Copiez ceux-ci, et vous aurez éventuellement un ensemble de scripts PS capables de se réfuter votre environnement d'échange à partir de zéro.

0
RainyRat

Je cherchais Powehell pour remplacer nos scripts de lots client - Programmes en cours d'exécution, scripts de connexion, etc.

Mais a constaté qu'il a ajouté au moins 10 secondes pour vous connecter, c'est-à-dire avec tous les "Tweaks" en place. Alors fini par rester avec ce que nous utilisions.

0
Tubs

Tandis que ce n'est pas la langue de script la plus simple de ramasser (une expérience solide avec des tuyaux présumées) et a son propre effet de levier des bizarreries (donnez-moi un simpleSED - comme Thingy !!), je trouve PowerShell assez puissant. Pas à la hauteur du niveau de Bash ou d'autres coquilles UNIX, mais toujours.

Je l'utilise pour superviser certaines exportations de base de données et importations avec des avertissements de courrier électronique au cas où les choses vont mal, et faire des opérations de traitement par lots de routine.

C'est déjà déjà ma coque de Windows primaire, bien que ce ne soit pas vraiment "écrire moins faire plus" de choses. PowerShell a sa verbosité (et son héritage .NET) jouant contre elle.

0
Berzemus

Nous l'utilisons pour une autre tâche administrative, étant une boutique surtout Microsoft. Certains scripts sont simples, comme nettoyer d'anciens fichiers ou des machines à déformation et enregistrant les résultats. Un script audit des ordinateurs utilisant principalement WMI et enregistre les résultats dans une base de données. Il reçoit des choses comme du matériel (CPU, RAM, lecteurs, etc.), des informations réseau, des utilisateurs locaux, des logiciels installés et des informations de profil. Il y en a un qui appelle un service Web pour envoyer un courrier électronique. Je pense à l'avenir, il remplacera le reste des scripts VBScript des scripts toujours utilisés. Nous n'utilisons pas encore cela pour Exchange ou SQL Server Tâches.

J'attends avec impatience la prochaine version, qui aura une prise en charge des emplois de base, des transactions, une meilleure gestion des exceptions, une nouvelle ISE (environnement de script intégré), un meilleur débogage, etc.

0
Bratch

PowerShell version 1.0 a été cruellement limitée dans de nombreux aspects, mais la version 2.0 vient bien. Par rapport aux scripts par lots, il est beaucoup plus puissant. Je ne l'utilise pas vraiment comme une coquille, seulement pour les scripts, alors mon expérience est colorée en conséquence. Je n'aime pas vraiment la syntaxe (-eq vs ==, -gt vs >, etc.), mais j'apprécie de pouvoir tomber dans . Net Si je dois faire quelque chose de bizarre. Je pense que par la version 3.0, ce sera génial. À l'heure actuelle, je le mettrais fermement dans la catégorie "Obtenir le travail".

Je l'utilise principalement pour automatiser le déploiement du code. C'est une zone où elle brille sur la création de quelque chose dans C #. Les opérations liées à la coque telles que la copie de répertoire récursive et d'autres choses, les scraptres Bash ont pris pour acquis pendant des années de rendre les choses tellement plus faciles.

0
Trent