¿Potencia Shell? Lo usas ¿Me puede mostrar algunas cosas interesantes de administración del sistema que puedo hacer con él? [cerrado]

45

Sigo leyendo en todas partes que PowerShell es el camino del futuro. Cuando se lanzó por primera vez, hice un montón de laboratorios virtuales, pero desde entonces todavía no lo he usado en un entorno de producción. Sé que llegará el día en que esté lidiando con los sistemas operativos donde ya está instalado, así que quiero estar listo.

Quiero saber:

  1. Lo usas
  2. ¿Cuál ha sido su proceso de 'arranque' para usar PowerShell?
  3. ¿Qué tipo de tareas de administración del sistema ha programado?
  4. Soy administrador de la base de datos de SQL Server. ¿Cuáles son algunas cosas interesantes que hacer con él?

Parece que todos están de acuerdo en que Microsoft está presionando tanto, pero en realidad nadie lo está usando todavía. Quiero saber de los administradores de sistemas que lo usan para realizar tareas diarias y compartir algunos ejemplos de código.

Nick Kavadias
fuente
JScript está muerto?
Sophie Alpert
77
Intenta no ser un troll con tus titulares engañosos la próxima vez.
Jaykul
Tal vez sea porque a veces desearía que desapareciera como jscript. ¿Soy solo yo o es muy feo y detallado?
Nick Kavadias

Respuestas:

34

Microsoft está haciendo todo lo posible para que PowerShell sea la elección de los usuarios avanzados y los escritores de automatización en todas partes. Atrás quedaron los días de compilar código en .NET para hacer lo mismo, ahora solo necesita notepad.exe y google. Somos grandes admiradores en la oficina, especialmente porque la Consola de administración de Exchange 2007 NO incluye todo lo que puede hacer en PowerShell. Microsoft falló deliberadamente en implementar cosas que solo se hacen de vez en cuando, más fáciles de desarrollar de esa manera, lo que obliga a su uso si tiene algo parecido a un entorno complejo.

La administración de la nueva generación de productos de Microsoft (Win7, Windows Server 2008, Exchange 2007/2010, SQL Server 2008) tiene todos los ganchos de PowerShell muy ricos. Una vez que Remote Powershell (PowerShell 2.0 IIRC) se implemente con Server 2008 R2, será aún MÁS útil para los escritores de automatización.

Lo que hemos hecho con él:

  • Cree una página web para delegar ciertas tareas administrativas a los usuarios del servicio de asistencia. La página web dispara comandos que se ejecutan en PowerShell. Cosas que hace:
    • Crear y eliminar cuentas de usuario, incluido el aprovisionamiento de buzones de Exchange 2007 y directorios de inicio
    • Desbloquea cuentas bloqueadas
    • Crear / eliminar grupos
    • Agregar / eliminar usuarios de grupos
    • Mover usuarios entre almacenes de correo
    • Establecer contraseñas
  • Tome extractos del sistema ERP e inserte datos de la libreta de direcciones global en Active Directory todas las noches.
  • Resuelva el problema de LegacyExchangeDN que surgió con nuestra migración de Exchange 2003 a Exchange 2007. Tuve que agregar una dirección X500 a todos los que solían estar en Exchange 2003. Un script de PowerShell bastante corto lo arregló.
  • Creación con guión de "buzones de grupo" (buzones compartidos en Exchange donde varios usuarios tienen acceso al buzón), un proceso manual debido a la naturaleza de los datos que necesitamos antes de iniciarlo. Estandarizó en gran medida la configuración de estos buzones.
  • Creó un script que recorrió todas las máquinas dominadas restableciendo una clave de registro específica y reiniciando un servicio. Tardaron 18 horas en completarse, pero hizo el trabajo.

Entonces sí, PowerShell estará con nosotros por bastante tiempo.

EDITAR : Agregar una muestra de código, ya que se solicitó

$ lista = import-csv ("groupusers.csv")
$ lastseengroup = $ lista [0] .group
$ ADGroupPrefix = "grp.netware".
$ ADGroupSuffix = "{redactado - en el formato de, ou = grupos, dc = dominio, dc = dominio, dc = dominio}"
Lista de miembros de variable clara
Usuarios desconocidos de variable clara
foreach ($ entrada en $ lista) {
    if ($ ($ entry.group) -ne $ lastseengroup) {
        echo "tropezó con el nuevo grupo $ ($ entry.group), confirmando cambios en $ lastseengroup"
        $ newgroup = $ ADgroupPrefix + $ lastseengroup
        $ newgroupdn = '"' +" cn = $ newgroup $ ADGroupSuffix "+ '"'
        echo "obteniendo DN para $ newgroup"
        $ existentegroup = dsquery group domainroot -name $ newgroup
        if (($ existente grupo -ne $ nulo)) {
            dsmod group $ newgroupdn -chmbr $ lista de miembros
        } más {
            dsadd group $ newgroupdn -scope u -secgrp yes -members $ memberlist -desc "Grupo importado de eDirectory"
        }
        Lista de miembros de variable clara
    }
    $ Usuario = get-user $ ($ entry.member) -ErrorAction SilentlyContinue
    if ($ User.isvalid) {
        $ UserDN = $ User.distinguishedname
        $ memberlist = $ memberlist + '"' +" $ UserDN "+ '"'
    } más {
        $ unknownusers = $ unknownusers + $ ($ entry.member)
    }
    $ lastseengroup = $ ($ entry.group)

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

Esto toma un archivo CSV creado con un script perl y actualiza un conjunto de grupos. Si el grupo ya existe, reemplaza la membresía con la especificada en el archivo. Si el grupo no existe, lo crea. Esta es una sincronización unidireccional. Además, todavía no está en producción, pero está cerca.

sysadmin1138
fuente
66
PowerShell remoto te refieres a ssh!?! ¡ya era hora!
Nick Kavadias
2
¿Cómo ejecutas los scripts de PowerShell desde un sitio web? ¿Utilizas los scripts de PowerShell como lenguaje de programación web? ¿Estás usando powershellASP? ¿Está ejecutando sus scripts como usuario de IIS?
quentin
17

Dado que los productos de servidor de Microsoft estarán habilitados para PowerShell desde el principio (creo que la próxima versión de Exchange tiene toda la configuración disponible a través de PowerShell), y que libros como PowerShell en la práctica describen algunas excelentes maneras de automatizar tareas que de otra manera serían monótonas, creo Es razonable sugerir que PowerShell será una tecnología frecuente en el servidor de Windows por un tiempo todavía.

moobaa
fuente
ese libro todavía está en beta / se escribe
Nick Kavadias
Sí, lo es, pero aún puede comprarlo ahora y obtener acceso anticipado a los contenidos. Y hay toneladas de cosas de mantenimiento del servidor allí :)
moobaa
44
Exchange ha sido todo PowerShell desde Exchange 2007. OCS será totalmente compatible con PowerShell en su próxima versión; la mayoría de los productos de System Center lo admiten totalmente o lo harán en sus próximas versiones. PowerShell no va a ninguna parte.
Paul
12

Recomiendo el Podcast de Scott Hanselman # 162 . Parece que todos los equipos de servidores de Microsoft están "obligados" a proporcionar cmdlets de PowerShell y también a seguir una sintaxis única y coherente.

Además, terceros como VMWare lo están adoptando

En resumen, creo que PowerShell a partir de 2.0 está seriamente en el negocio de reemplazar archivos por lotes para todas las tareas, excepto las más triviales.

Michael Stum
fuente
10

Diez scripts de PowerShell que uso como administrador de la base de datos de SQL Server (todos se describen / publican en mi blog ):

  1. Compruebe el espacio en disco en todos los servidores SQL y cargue datos en una tabla SQL
  2. Ejecute informes de permisos en todos los servidores SQL de producción y cargue datos en una base de datos SQL
  3. Descubra todos los clústeres, nodos y virtuales de Windows Server 2003 en la red y cárguelos en tablas SQL
  4. Descubra todas las bases de datos en todos los servidores SQL como se define en SCCM y cárguelas en una tabla SQL
  5. Cree una tabla de puntuación de copia de seguridad de SQL Server cargando información de copia de seguridad en todos los servidores SQL en una tabla SQL
  6. Verifique que el motor de descarga TCP esté deshabilitado en Windows Server 2003 SP2 (esto es un factor decisivo para el rendimiento de muchos servidores SQL)
  7. Verifique las alineaciones de la partición del disco (también reduce el rendimiento si los discos están alineados incorrectamente)
  8. Copie tablas SQL de un servidor a otro
  9. Recursivley copia todos los paquetes SSIS utilizando un almacenamiento MSDB de un servidor a otro, incluida la estructura de carpetas
  10. Crear mi propio visor de dependencia de objetos gráficos
Chad Miller
fuente
8

¿Qué tipo de tareas de administración has escrito con él?

monitoreo de aplicaciones / servicios: obtenga números de rendimiento clave de EventLog (remoto) y procedimientos almacenados y muéstrelos desde un único archivo por lotes

Soy un DBA de SQL Server, ¿me muestran algunas cosas interesantes que hacer con él?

automssqlbackup : copia de seguridad diaria para MSSQL con rotación (diaria = incremental, semanal + mensual = completa; mantener 5 copias de seguridad diarias, 5 copias semanales), compresión, notificación por correo electrónico

devio
fuente
+1 para automatizar todo el proceso de copia de seguridad de MSSQL.
Andrei Rînea el
Sí ... Powershell es oro puro para automatizar copias de seguridad complejas en SQL Server. Lo usamos para comprimir y cifrar copias de seguridad por hora y luego enviar los archivos a Amazon S3 para almacenamiento externo: codeblog.theg2.net/2010/02/…
Greg Bray
7

Después de haber utilizado los scripts de shell de Unix en una carrera anterior, luego pasar a la administración del servidor de Windows, puedo decir que realmente aprecio Powershell: no tengo tiempo ni capacidad para aprender demasiada sintaxis arcana y me sorprendió gratamente que mucho de los scripts de PowerShell se pueden escribir con un lenguaje muy sencillo ... ¡¡toma eso lo que vale ya que estaba acostumbrado a ksh !!

Predigo que estará por mucho tiempo.

Tuerca
fuente
7

Pensé que esto era genial: con SQL Server 2008 obtienes nuevas extensiones de PowerShell que te permiten navegar por bases de datos SQL al igual que tu sistema de archivos o registro local.

Después de instalar las herramientas de SQL Server Client, puede abrir cualquier base de datos en PowerShell (a través del menú contextual del botón derecho) y jugar con ella de forma orientada a objetos:

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

Tenga en cuenta que la primera línea simplemente cambia la solicitud para que no sea tan larga.

Con suerte, aparte de eso, es evidente lo que está sucediendo aquí :)

Lex
fuente
+1 Wow, esto es bastante útil. ¡Gracias!
jftuga
5

SQL Server 2008 ahora tiene opciones de contexto de PowerShell en Management Studio, por lo que más que Exchange lo está aceptando. Además, piense en ello como el reemplazo de DOS, ya que eso es más o menos lo que MS estaba pensando, ya que simplemente no pueden mejorar la seguridad de DOS por problemas de compatibilidad con versiones anteriores, por lo que simplemente crearon algo nuevo y wammo, ¡problema resuelto!

SQLGuyChuck
fuente
4

¡Yo también soy un DBA, y un guionista de mucho tiempo, volviendo a los archivos por lotes de DOS, V3.3! Pasó a VB Script pero PS es muy poderoso. Echa un vistazo a - Lo sentimos, no puedo publicar el enlace, ya que soy un nuevo usuario. Obtuve esto del blog de Otto Helweg. Es una herramienta de inventario de software barata y alegre.

  • 1- Extrae la lista de computadoras para consultar desde una tabla de base de datos
  • 2- Agrega los datos actuales y el tiempo al resultado
  • 3- Registra los resultados de la auditoría en una base de datos

Ejemplo de script de PowerShell:

# 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
fuente
3

Las siguientes tareas las realiza mi equipo de manera muy regular con PowerShell

  • enumere la memoria disponible en todos los nodos de nuestros clústeres de Hyper-V.
  • Administrar un archivador Netapp
  • Provisión de nuevas máquinas virtuales Hyper-V
  • Escribir y leer desde listas de SharePoint mediante programación

Día a día, tengo un aviso de PS todo el tiempo y lo uso para cualquiera de las tareas para las que solía usar CMD.

Aquí hay algunos ejemplos de código para leer las listas de Sharepoint. Uso servicios web de Sharepoint y el nuevo cmdlet "New-WebServiceProxy" en 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 tiene una gran publicación de blog sobre el uso de los servicios web de Sharepoint que utilicé como base para crear todas mis funciones. Incluso tiene un increíble script new-webservice.ps1 que puede usar si todavía usa PowerShell V1.

Además, aquí está la función base que usé para obtener la memoria disponible en los nodos de mi clúster

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
fuente
¿Tienes algún código de muestra que estés dispuesto a compartir? Estoy particularmente interesado en leer y escribir listas de SharePoint.
Brian
2

Intenté PowerShell para un pequeño proyecto en el trabajo: una migración diaria de un subconjunto de ~ 600 usuarios y ~ 200 grupos desde el AD corporativo a un antiguo sistema UNIX utilizando archivos similares a CSV . Me ofrecieron un script VBScript de 500 líneas (!) Que extrajo un solo grupo y sus usuarios como punto de partida.

Resultó que un script de PowerShell de ~ 20 líneas podría hacer todo ...

Como usuario * NIX (servidor y cliente), me ha sorprendido gratamente con PowerShell. Incluso si solo conoce un pequeño subconjunto de comandos, puede hacer un trabajo realmente poderoso con él. Solo necesito acceso remoto SSH (similar) ...

Peter Mortensen
fuente
búsqueda psremoting
Sam
1

¿Cómo no puedo usarlo? Todas las aplicaciones de servidor de Microsoft que salen / se actualizan ahora se administran con Powershell. Luego se proporciona una consola de administración / UI más o menos molesta incorporada en la parte superior de este núcleo, que a menudo es lento y, como alguien señaló, carece de funciones disponibles ... por lo que no puedo decir que tengamos muchas opciones en realidad ^ ^

Oskar Duveborn
fuente
Echa un vistazo a este pequeño script de PowerShell para crear tus ensambles y acelerar todas tus consolas basadas en PowerShell
Jesse Weigert
1

Powershell no es perfecto, pero si lo has usado, sabes que es genial. Tener acceso a toda la biblioteca .net más cmdlets integrados (y hacer sus propios cmdlets con PS en 2.0), eso es bastante bueno.

Lo único que creo que falta es un buen IDE para él, que estoy seguro vendrá de MS algún día. En este momento, uso el PowerShell Plus de Idera y el administrador de secuencias de comandos que permiten la depuración y son bastante geniales.

Pude dejar de VB bastante bien.

Mi proyecto más grande hasta la fecha con posh es usar "powershellASP" para crear una página web básica que ejecute comandos de powershell y extraiga información de VM y host vmware de mis más de una docena de hosts VMWare ESXi (gratis) y los muestre en tablas HTML. Hice esto porque con VMWare ESXi gratuito y sin centro virtual, no hay otra forma de obtener una visión general en tiempo real de todas mis máquinas virtuales en la empresa. PowershellASP es un analizador gratuito de terceros escrito para IIS y no es compatible con MS. Por lo tanto, puede hacer algunas cosas limitadas en este momento y la documentación es bastante escasa.


fuente
Hay PowerGUI, y en powergui uso ScriptEditor.exe, no puedo imaginar cómo puedo vivir sin eso ...
Nicolas Dorier
Powershell 2 incluye un gran Powershell ISE (Integrated Script Editor). El CTP 3 está disponible, RTM ya está disponible, lanzamiento final en octubre de 2009.
Precipitado
1

Tengo un montón de secuencias de comandos de administración / inventario que buscan en AD diferentes cosas y las consultan a través de WMI para obtener estadísticas vitales como recursos compartidos en el servidor, espacio en disco, espacio en disco usado, etc.

Guiones generales:

  1. Obtenga espacio en disco libre / usado, RAM, etc.
  2. Consulta WMI para obtener información del BIOS, modelo de marca del servidor, etc.
  3. Verifique la versión AV y asegúrese de que ciertas entradas de registro estén allí
  4. Auditoría de recursos compartidos en servidores de Windows

Guiones de usuario:

  1. Enumere AD agarrando a todos los usuarios, y a qué grupos pertenecen luego escriba a Excel o CSV
  2. Encuentra usuarios actualmente conectados a través de TS y en la consola

Tengo uno que enumera todas las máquinas invitadas VMWare en mis servidores ESX

Tengo un script que toma archivos después de x días y los elimina de forma segura.

Básicamente puedo hacer lo que tomó alrededor de 200 líneas de VBScript y hacerlo en 10 de PowerShell. También puede hacer cosas que simplemente no puede hacer o hacer bien en VBScript, como enviar correos electrónicos con archivos adjuntos, lo que hago regularmente para enviarme los resultados de mis scripts. También puede escribir entradas significativas y únicas en el registro de eventos con nombres de servicio personalizados e ID de eventos.

Eso es lo que puedo pensar fuera de mi cabeza. Mi herramienta de elección es PowerShell ahora, simplemente hace la vida más fácil.

Básicamente es tan útil para un administrador del sistema como las secuencias de comandos Bash para un administrador de Unix.

Zypher
fuente
0

Estaba buscando en Poweshell para reemplazar nuestros scripts de lotes de clientes: ejecutar programas, scripts de inicio de sesión, etc.

Pero descubrió que agregaba al menos 10 segundos al tiempo de inicio de sesión, eso es con todos los "ajustes" en su lugar. Así que terminé quedándome con lo que estábamos usando.

Tinas
fuente
No es la cosa más rápida del mundo, pero puede hacer casi todo. Si todo lo que necesita hacer es asignar algunas unidades, los scripts por lotes son mucho más rápidos.
sysadmin1138
0

Al no ser un desarrollador de .NET, tengo un uso limitado para todas las cosas relacionadas con .NET que PS te permite usar. Sin embargo, al ser un administrador de Exchange (entre otras cosas), la integración de PowerShell para Exchange 2007 es INCREÍBLE. Finalmente tengo un motor de secuencias de comandos confiable para mi sistema de correo; hasta ahora, me ha enviado estadísticas mensuales sobre los buzones de todos, ajustando a quién se asignan las diferentes direcciones de correo electrónico según la hora del día, creando y asignando automáticamente permisos en carpetas públicas y usuarios de equilibrio de carga entre nuestras dos bases de datos de buzones de correo . La otra cosa interesante desde el punto de vista Ex07 es que después de hacer algo en la GUI, le presenta los comandos de PowerShell relevantes para lo que acaba de hacer. Cópielos y eventualmente tendrá un conjunto de scripts de PS que pueden modificar su entorno de Exchange desde cero.

RainyRat
fuente
0

Automatizar ciertas cosas con los controles del servidor donde trabajo (recopilar información básica de WMI y recopilar errores y advertencias de los registros de eventos).

Su manejo de los registros de eventos es increíble.

Recientemente escribí un script para deshabilitar la ventana emergente de actualización automática que Foxit Reader ha habilitado de manera predeterminada en un dominio en el que se ejecuta el script. Extrae una lista de computadoras de AD luego las prueba para ver si está funcionando, luego cambia un 1 a un 0.

¡Una cosa que olvidé!

Tiene prácticamente acceso completo a las bibliotecas .NET. Es un poco difícil hacer cosas realmente complicadas con él, pero si tienes la necesidad, está ahí para ti.

revs nonades
fuente
0

Lo usamos para bastantes tareas administrativas, siendo principalmente una tienda de Microsoft. Algunos scripts son simples, como limpiar archivos viejos o desfragmentar máquinas y registrar los resultados. Un script audita las computadoras utilizando principalmente WMI y registra los resultados en una base de datos. Obtiene cosas como hardware (CPU, RAM, unidades, etc.), información de red, usuarios locales, software instalado e información de perfil. Hay uno que llama a un servicio web para enviar correos electrónicos. Creo que en el futuro reemplazará el resto de los scripts de VBScript que todavía se están utilizando. Todavía no lo estamos usando para tareas de Exchange o SQL Server.

Espero con ansias la próxima versión, que tendrá soporte para trabajos en segundo plano, transacciones, mejor manejo de excepciones, un nuevo ISE (Integrated Scripting Environment), mejor depuración, etc.

Bratch
fuente
0

Mis administradores de Windows todavía no usan PowerShell. Todos han oído hablar de él, pero no se han tomado el tiempo para familiarizarse con él.

Decidí echarle un vistazo yo mismo. Viniendo de un fondo de shell de Unix, pensé que Windows finalmente debía tener un entorno de programación de shell real. Creo que Microsoft hizo algunas cosas bien con PowerShell y otras no tan bien.

En el lado bueno está su uso de objetos como intermediario entre cmdlets en PowerShell. Esto brinda un nivel de potencia a PowerShell que las secuencias de comandos basadas en texto tienen que piratear para poder trabajar.

En el lado negativo, realmente no aprovechan gran parte de los comandos de shell de Unix. Por lo tanto, la curva de aprendizaje es innecesariamente empinada y no ayuda a las personas a pasar fácilmente de Unix a PowerShell o viceversa. Lo máximo que hacen es definir alias para algunos de los cmdlets de PowerShell, como ls aliasing Get-ChildItem con todos los modificadores de línea de comandos diferentes.

Solo mis dos centavos ...

usuario7286
fuente
0

Esta es más una respuesta del desarrollador, pero es del mundo real y comenzaremos a probar esto en algún momento en los próximos meses. Estoy empezando a aprender PowerShell para escribir scripts para llevar las tareas de SQL Server a nuestro entorno de integración continua . Los scripts de integración continua serán ejecutados principalmente por NAnt y MSBuild a través de JetBrains TeamCity .

Además de eso, estoy buscando cambiar a PowerShell como mi shell de comandos principal de Windows para fines generales y especialmente para tareas de administración de bases de datos de SQL Server.

Lo siento, todavía no tengo muestras de código para compartir, ¡porque todavía estoy aprendiendo! Sin embargo, estaré encantado de publicar algunas cuando lo haga :)

Aquí hay una muestra de código de línea única con la que acabo de responder otra pregunta tuya :) Pero bueno, para la wiki ...

Esto enumerará las revisiones instaladas:

Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix
squillman
fuente
hurra por powershell, lástima que no esté instalado por defecto en un servidor 2003. Sin embargo, la ubicación del registro ayudó.
Nick Kavadias
0

Si bien no es el lenguaje de script más fácil de aprender (se presume una sólida experiencia con tuberías) y tiene su propio apalancamiento de rarezas (¡dame una simple cosita sed !), Encuentro PowerShell bastante poderoso. No hasta el nivel de Bash u otros shells de Unix, pero aún así.

Lo uso para supervisar algunas exportaciones e importaciones de bases de datos con advertencias por correo electrónico en caso de que las cosas salgan mal y hago algunas operaciones por lotes de rutina.

Ciertamente ya es mi shell principal de Windows, aunque en realidad no es el tipo de cosas "escribe menos haz más". PowerShell tiene su verbosidad (y herencia .NET) jugando en su contra.

Berzemus
fuente
0

La versión 1.0 de PowerShell estaba muy limitada en muchos aspectos, pero la versión 2.0 está funcionando muy bien. En comparación con los scripts por lotes, es mucho más poderoso. Realmente no lo uso como un shell, solo para scripts, por lo que mi experiencia está coloreada en consecuencia. Realmente no me gusta la sintaxis ( -eqvs ==, -gtvs >, etc.), pero agradezco poder ingresar a .NET si necesito hacer algo extraño. Creo que con la versión 3.0 será genial. En este momento lo pondría firmemente en la categoría de "hace el trabajo".

Lo uso principalmente para automatizar la implementación del código. Esta es un área donde brilla sobre la creación de algo en C #. Las operaciones relacionadas con el shell, como la copia recursiva de directorios y otras cosas que los scripters de Bash han dado por sentado durante años, hacen las cosas mucho más fáciles.

Peter Mortensen
fuente