Usando powershell como administrador del sistema. Introducción a Power Shell. Cmdlets en PowerShell

PowerShell es un motor de software orientado a objetos y lenguaje de secuencias de comandos con interfaz línea de comando, brindando a los profesionales de TI mayores oportunidades para configurar sistemas operativos de la familia MS Windows. En pocas palabras, es una especie de herramienta de administración universal. Este artículo discutirá tecnicas basicas escribir scripts en PowerShell, lo que le permite automatizar fácilmente la administración de su entorno Windows.

PowerShell ofrece una interfaz de consola pura y un entorno de desarrollo completo. PowerShell ISE(Entorno de secuencias de comandos integrado, entorno de secuencias de comandos integrado) para secuencias de comandos. Para iniciar la interfaz de línea de comandos, escriba powershell en el menú Ejecutar (WinKey + R). PowerShell ISE se inicia mediante el comando "PowerShell ISE" en el mismo menú.

ISE es más preferible ya que proporciona mayor flexibilidad al desarrollador gracias al resaltado de sintaxis, el autocompletado de código y otras características que se encuentran en muchos IDE "grandes".

Escribir y ejecutar scripts

Los scripts se guardan como archivos con la extensión .ps1. Aunque PowerShell ha sido durante mucho tiempo una parte nativa del sistema operativo Windows, no puedes ejecutar sus scripts con un simple doble clic. Para hacer esto, haga clic derecho en el script y seleccione "Ejecutar en PowerShell".

También hay políticas del sistema, limitando la ejecución de scripts. puedes comprobar parámetros actuales política ingresando el comando Get-ExecutionPolicy. El resultado será uno de los siguientes valores:

  • Restringido- Está prohibida la ejecución de scripts. Configuración estándar;
  • Todo firmado- puedes ejecutar scripts firmados por un desarrollador de confianza; Antes de ejecutar el script, PowerShell le pedirá confirmación;
  • Firmado remoto- puedes ejecutar tus propios scripts o aquellos firmados por un desarrollador de confianza;
  • Irrestricto- puedes ejecutar cualquier script.

Para comenzar, debe cambiar la configuración de la política de inicio a RemoteSigned usando el comando Set-ExecutionPolicy:

cmdlets

Los cmdlets son comandos con una función predefinida, como declaraciones condicionales en lenguajes de programación. Tienen varias características clave:

  • Hay cmdlets de sistema, de usuario y opcionales;
  • el resultado de ejecutar el cmdlet será un objeto o una matriz de objetos;
  • Los cmdlets pueden procesar datos y pasarlos a otros cmdlets mediante canalizaciones;
  • Los cmdlets no distinguen entre mayúsculas y minúsculas, por lo que no hay diferencia entre Get-ADUser, get-aduser y gEt-AdUser;
  • se utiliza un símbolo como separador; .

Cada cmdlet contiene un verbo y un sustantivo separados por un guión. Por ejemplo:

  • Obtener proceso- mostrar los procesos actuales que se ejecutan en la computadora;
  • Obtener servicio- mostrar una lista de servicios y su estado;
  • Obtener contenido- mostrar el contenido del archivo especificado, por ejemplo Get-Content C:\Windows\System32\drivers\etc\hosts.

Si es necesario, puede enumerar todos los cmdlets disponibles usando Get-Help-Category:

También puede crear sus propios cmdlets.

Opciones

Cada cmdlet tiene varios parámetros que determinan cómo funciona. PowerShell ISE sugiere automáticamente todos los parámetros disponibles y muestra su tipo. Por ejemplo, Get-Service-NameW* devuelve una lista de servicios cuyo nombre comienza con W . Si olvida qué parámetros tiene el cmdlet que ingresó, use Get-Member. Por ejemplo, Obtener-Proceso | Obtener miembro:

Si no encuentra lo que necesita o no está seguro de cómo configurar los parámetros correctamente, puede incluso solicitar ejemplos utilizando el parámetro -Examples:

Algunos cmdlets también se pueden llamar mediante alias; por ejemplo, en lugar de Get-Help, simplemente puede escribir Ayuda.

Al escribir guiones extensos o desarrollar en equipo, puede utilizar comentarios. Cada comentario comienza con un carácter # y el bloque de comentarios se limita a combinaciones de caracteres.<# и #>al principio y al final, respectivamente.

Transportador

PowerShell Le permite intercambiar datos entre cmdlets mediante una canalización. Por ejemplo:

  • Obtener servicio | SortObject -Estado de la propiedad - clasificación servicios en ejecución por estado;
  • "¡Hola Mundo!" | Out-File C:\ps\test.txt: escribir texto en un archivo.

Se pueden utilizar varios transportadores. Por ejemplo, el siguiente script enumera los nombres de todos los servicios excepto los detenidos:

Obtener servicio | DONDE ($_.status -eq “En ejecución”) | SELECCIONAR nombre para mostrar

Conclusión

Entonces, gracias a este tutorial, los novatos tienen una idea de qué se trata PowerShell. También analizamos opciones para cambiar la política de ejecución de scripts, qué es un cmdlet, cómo intercambian datos mediante una canalización y cómo obtener las propiedades del objeto deseado. Recuerde que si tiene algún problema, puede utilizar el cmdlet Get-Help.

Es posible que los usuarios experimentados del sistema operativo Windows 10 hayan oído hablar de la utilidad de línea de comandos PowerShell. Aquellos con experiencia trabajando con Windows 7 y 8.1 también pueden estar familiarizados con él. Después de años de usar la aplicación de línea de comandos de Windows y los archivos .bat, es hora de familiarizarse con una herramienta más poderosa.

PowerShell es una valiosa adición a la lista herramientas de windows y su escala puede disuadir a algunos usuarios. ¿Qué es: un lenguaje de programación o un shell de comandos? No se preocupe: a pesar de sus amplias capacidades, cualquiera puede dominar PowerShell.

Paso 1: instalación

Para empezar, nos necesitamos a nosotros mismos. Utilidad PowerShell. Si está ejecutando Windows 10, ya tiene instalada la versión 5 de PowerShell. La actualización de aniversario de Windows 10 usa la versión 5.1, pero la diferencia no se nota. Windows 8 y 8.1 utilizan PowerShell 4, que también es suficiente. La instalación de PowerShell en Windows 7 no causará problemas, pero aún así tendrás que realizar un par de pasos adicionales. En particular, deberá instalar adicionalmente .Net Framework. Puede instalar Windows Management Framework, que incluye PowerShell.

PowerShell tiene dos interfaces. Los usuarios avanzados pueden optar por una interfaz GUI completa conocida como Integrated Scripting Environment (ISE). Para los principiantes, es mejor utilizar la consola PowerShell, una sencilla interfaz de línea de comandos de Windows basada en texto o incluso DOS 3.2.

Para ejecutar PowerShell como administrador en Windows 10, haga clic en el botón Inicio y desplácese hacia abajo hasta Aplicaciones. WindowsPowerShell. En Windows 8.1, busque Windows PowerShell en Carpeta del sistema en Windows. En Windows 7, el shell se encuentra en la carpeta Accesorios. Como usuario habitual PowerShell se puede iniciar exactamente de la misma manera usando botón izquierdo ratón en lugar del derecho.

Puede utilizar la búsqueda en cualquier versión de Windows. Para facilitar su uso en el futuro, puede anclar PowerShell a la barra de tareas.

Paso 2: comandos antiguos de Windows

La sintaxis de comandos de Windows en PowerShell funciona como de costumbre. Por ejemplo, CD cambia carpetas, directorio muestra una lista de todos los archivos y carpetas dentro de la carpeta actual.

Dependiendo del método de lanzamiento Consola PowerShell puedes empezar en c:\Windows\sistema32 o en c :\Usuarios\ . El ejemplo de la captura de pantalla utiliza el comando CD..(con un espacio) para subir un nivel a la vez, luego ejecute el comando directorio para mostrar una lista de archivos y carpetas en un directorio DO:\.

Paso 3: instale los archivos de ayuda

Equipos como CD Y directorio no son comandos activos de PowerShell. Estos son los llamados alias, sustitutos de comandos reales de PowerShell. Los alias son útiles para quienes tienen amplia experiencia con la línea de comandos. Sin embargo, no profundizan en PowerShell.

Para comenzar con PowerShell, escriba ayuda y el comando que necesitas. La captura de pantalla muestra el comando. .

Equipo ayuda dice eso directorio es un alias para el comando de PowerShell Get-ChildItem. si escribes obtener elemento infantil V PD C:\>, verás lo mismo que cuando usas el comando directorio.

Como se indica en la parte inferior de la captura de pantalla, los archivos de ayuda de PowerShell no se instalan automáticamente. Para obtenerlos, ejecute PowerShell como administrador y escriba ayuda-actualización. La instalación de los archivos de ayuda tardará varios minutos; es posible que falten algunos módulos, por ejemplo, en en este caso No se instaló la ayuda para NetWNV y SecureBoot. Cuando todo esté listo, sistema completo La ayuda siempre dará los consejos necesarios.

Ahora escribe el comando obtener ayuda y cualquier comando que le interese (“cmdlet” en PowerShell, cmdlets en ruso), se mostrará su descripción. Por ejemplo, obtener ayuda obtener elemento infantil muestra una lista de opciones obtener elemento infantil. También puedes mostrar diferentes opciones posibles. Por ejemplo

obtener-ayuda obtener-childitem -ejemplos

da siete ejemplos detallados usar obtener elemento infantil. Equipo

obtener-ayuda obtener-childitem -detallado

Incluye estos siete ejemplos y explicaciones detalladas de cada parámetro en el cmdlet. obtener elemento infantil.

Paso 4: obtenga ayuda con la configuración

En la captura de pantalla Es posible que hayas notado dos listas debajo SINTAXIS Para obtener elemento infantil. Tener dos sintaxis diferentes significa que hay dos formas de ejecutar el cmdlet. ¿Cómo mantener la sintaxis separada entre sí y qué significan los parámetros? La respuesta es sencilla si conoces el truco.

Para obtener detalles sobre los parámetros de cmdlet obtener elemento infantil o cualquier otro parámetro de uso -lleno:

obtener-ayuda obtener-childitem -full

Esto le brinda una lista de lo que puede hacer con el cmdlet y lo que sucederá. Mira la captura de pantalla.

Al revisar las descripciones de los parámetros, notará que obtener elemento infantil permite obtener un objeto niño(como un nombre de subcarpeta o de archivo) en ubicación especificada, con o sin coincidencia de ciertos caracteres. Por ejemplo:

get-childItem “*.txt” -recurse

devuelve una lista de archivos "*.txt" en carpeta actual y todas las subcarpetas (debido al parámetro -recurse). Mientras

get-childitem “HKLM:\Software”

devuelve una lista de todas las claves de registro nivel superior V HKEY_LOCAL_MACHINE\Software.

Si alguna vez intentó ingresar al registro usando la línea de comando de Windows o archivos .bat, apreciará la funcionalidad de esta opción de acceso.

Paso 5: aprender nombres

Hay una razón por la que los cmdlets mostrados hasta ahora son similares: get-childitem, actualización-ayuda, obtener-ayuda Utilice un solo patrón verbo-sustantivo. Todos los cmdlets de PowerShell utilizan esta convención; utilizan un verbo antes de un único sustantivo. Esto atraerá a aquellos que alguna vez sufrieron nombres de comandos inconsistentes en los lenguajes VB y VBA.

Eche un vistazo a los cmdlets más comunes:

establecer ubicación: establece la ubicación de trabajo actual en una ubicación específica

obtener contenido: Obtiene el contenido del archivo

obtener artículo: recupera archivos y carpetas

copiar elemento: copia un objeto de una ubicación a otra

eliminar elemento: Elimina archivos y carpetas

: Obtiene procesos que se ejecutan en una computadora local o remota

obtener-servicio: Obtiene servicios ejecutándose en una computadora local o remota

invocar-webrequest: recupera contenido de una página web en Internet

Para ver cómo funciona un cmdlet específico, use obtener ayuda como en el caso

obtener-ayuda copiar-elemento-completo

Según la descripción de la ayuda, podrá comprender qué necesita el cmdlet. Por ejemplo, si desea copiar todos los archivos y carpetas de Documentos V c:\temperatura, usar

copiar elemento c:\users\ \documents\* c:\temp

Al escribir este comando, verá algunas características interesantes del entorno PowerShell. Por ejemplo, si escribe copia-yo y presione el botón Tab, PowerShell completará Copiar elemento. Si escribe un cmdlet incorrectamente y PowerShell no puede reconocerlo, se proporciona una descripción completa de lo que se hizo mal.

Pruebe este cmdlet:

invocar-webrequest askwoody.com

Obtendrá una breve lista de los títulos, imágenes, enlaces y otro contenido de la página web. Por favor tenga en cuenta en obtener ayuda a la lista invocar-webrequest, que "devuelve una colección de formularios, enlaces, imágenes y otros elementos HTML importantes", exactamente lo que debería mostrarse en la pantalla.

Algunos cmdlets le ayudan a administrar PowerShell:

obtener comando: lista de todos los cmdlets disponibles

obtener-verbo: lista de todos los verbos disponibles

host claro: borra la pantalla del programa anfitrión

Diferentes parámetros le permiten reducir los comandos y estrechar el círculo opciones útiles. Por ejemplo, para ver una lista de todos los cmdlets que funcionan con los servicios de Windows, escriba

obtener-comando *-servicio

Se mostrarán todos los verbos disponibles con el sustantivo. servicio. Aquí está su lista:

Obtener servicio

Nuevo servicio

Servicio de reinicio

Reanudar-servicio

Servicio de configuración

Servicio de inicio

Servicio de parada

Suspender servicio

Puede combinar estos cmdlets con otros.

Paso 6: uso de tuberías

Si está familiarizado con la línea de comandos de Windows o archivos por lotes, entonces ya sabes acerca de la redirección y las canalizaciones. La redirección (> símbolo) y las canalizaciones (| símbolo) toman el resultado de una acción y lo adjuntan a otra ubicación. Por ejemplo, puedes redirigir el resultado del comando. directorio a un archivo de texto o pasar el resultado del comando silbido al equipo encontrar para filtrar resultados interesantes, como

directorio > temp.txt

ping a Askwoody.com | busque “paquetes” > temp2.txt

Aquí en el segundo equipo. encontrar busca una cadena paquetes, tomado de la dirección Askwoody.com por el equipo. silbido y concatena todas las líneas coincidentes en un archivo llamado temp2.txt.

El primero de estos comandos funciona bien en PowerShell. Para ejecutar el segundo comando necesitarías algo como

ping a Askwoody.com | paquetes de cadena de selección | archivo externo temp2.txt

El uso de redirecciones y canalizaciones mejora enormemente las capacidades de la línea de comandos de Windows: en lugar de desplazarse interminablemente hacia abajo en la pantalla en búsqueda cadena de texto Puede filtrar los comandos de Windows que necesita.

Powershell tiene soporte tubo, y no se limita a texto. PowerShell le permite pasar un objeto completo de un cmdlet a otro, donde el objeto es una combinación de datos (llamados propiedades) y acciones (métodos) que pueden usar esos datos.

La parte complicada viene a la hora de alinear los objetos. Los objetos proporcionados por un cmdlet deben coincidir con el tipo de objetos aceptados por el cmdlet receptor. El texto es un tipo de objeto muy simple, por lo que si trabaja con texto, alinear objetos es una tarea sencilla. El resto de objetos no son tan básicos.

¿Cómo entender esto? Usar cmdlet conseguir miembro. Si desea saber qué tipo de objeto está procesando un cmdlet, ejecútelo conseguir miembro. Por ejemplo, si está intentando comprender los procesos que se ejecutan en una computadora y ha reducido sus opciones a cmdlets , aquí se explica cómo averiguar el resultado de los cmdlets:

proceso de obtención | conseguir miembro

La ejecución de este cmdlet produce una larga lista de propiedades y métodos para , pero al principio de la lista puedes ver el tipo de objeto que crea :

Nombre de tipo: System.Diagnostics.Process

La siguiente captura de pantalla también muestra las propiedades. llamado get-process Identificadores, Nombre, NPM, PM, SI, VM Y W.S..

Si quieres manipular el resultado. para trabajar con este cmdlet (en lugar de mostrar una lista larga procesos activos en el monitor), necesita encontrar otro comando que tome como entrada Proceso.de.diagnóstico.del.sistema. Para encontrar el cmdlet que necesita, use PowerShell nuevamente:

get-command -Tipo de parámetro System.Diagnostics.Process

Este cmdlet proporciona una lista de cmdlets que pueden procesar Proceso.de.diagnóstico.del.sistema.

Algunos cmdlets son conocidos por aceptar casi cualquier tipo de datos. El principal de ellos es . Este cmdlet pasa por cada objeto enviado a través de la canalización, uno por uno, y le aplica los criterios de selección especificados. Hay un marcador especial llamado $_ , que le permite utilizar cada elemento de la tubería, uno a la vez.

Digamos que desea obtener una lista de todos los procesos que se ejecutan en una computadora con el nombre "svchost", es decir, desea hacer coincidir la propiedad Nombre proceso svchost. Utilice el comando:

proceso de obtención | objeto-dónde ($_.Name -eq “svchost”)

cmdlet mira cada objeto Proceso.de.diagnóstico.del.sistema, compara .Nombre este objeto con "svchost"; si hay coincidencias, se muestran en el monitor. Mira la captura de pantalla.

Paso 7: Analizar comandos útiles de PowerShell

A estas alturas ya sabes lo suficiente como para poder dañar el ordenador, así que ten cuidado. Veamos, por ejemplo, los comandos de PowerShell solicitados con frecuencia.

Estos comandos solo funcionan en Windows 10 y solo cuando ejecuta PowerShell como administrador. Están diseñados para reinstalar aplicaciones preinstaladas de Windows 10 y pueden resultar útiles para quienes primero desinstalaron estos programas y luego decidieron devolverlos. Los comandos se ven así:

Obtener-AppXPackage | Foreach (Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”)

Si ejecuta este comando, ignore las advertencias rojas y cuando se complete el comando, reinicie su computadora; Todos los programas preinstalados en Windows 10 aparecerán en sus lugares.

Así es como funciona este comando. Obtener-AppXPackage comprueba todos los paquetes de aplicaciones en el perfil de usuario. Incluso si elimina la aplicación, permanece en la lista de perfiles de usuario.

cmdlet Obtener-AppXPackage devuelve un objeto TipoNombre Microsoft.Windows.Appx.PackageManager.Commands.AppxPackage, que incluye el nombre completo del paquete de la aplicación y la ubicación del archivo de manifiesto XML correspondiente. Si ejecuta el cmdlet obtener paquete appx, verá una larga lista de paquetes de aplicaciones. La captura de pantalla muestra la descripción de la aplicación Xbox.

cmdlet para cada uno recorre cada objeto en Paquete AppX enviándolos al cmdlet Agregar paquete Appx. De acuerdo a obtener ayuda Para Agregar paquete Appx, hay dos interruptores de llave:

  • Cambiar -Registro Se utiliza para registrar instalaciones existentes de paquetes de aplicaciones, puede establecer parámetros. Deshabilitar el modo de desarrollo Y Registro
  • Cambiar -Desactivar el modo de desarrollo le indica a Windows que vuelva a registrar un paquete de aplicación existente que ha sido deshabilitado, anulado del registro o dañado.

Línea " $($_.InstallLocation)\AppXManifest.x ml" describe dónde se encuentra el archivo manifiesto.xml. Si miras los archivos AppXManifest.xml, verá una lista compleja de ID de aplicaciones, ejecutables y gran número Elementos visuales asociados a la aplicación.

Después del reinicio, todos los paquetes de aplicaciones agregados se descargan e instalan desde Tienda Windows Almacenar.

Aprenda PowerShell: libros y recursos

Este artículo abre una serie de posts dedicados a PowerShell. ¡Sí, es hora de la línea de comando!

Brevemente: ¿qué es PowerShell?

  • PowerShell: shell de línea de comando
  • Los comandos de PowerShell se ejecutan en una canalización
  • El entorno PowerShell se puede ampliar para dar cabida a una variedad de tecnologías.
  • y lo más importante, dominar PowerShell te convertirá en un mejor administrador.

¿Por qué PowerShell?

Vale la pena señalar dos puntos. En primer lugar, PowerShell contiene un lenguaje de programación; Se trata de un lenguaje muy compacto que contiene sólo unas dos docenas de palabras clave. Pero, de hecho, PowerShell, como se mencionó anteriormente, es un shell de línea de comandos, muy parecido a cmd.exe o UNIX Bash.

Segundo punto: Microsoft no fomenta la práctica de utilizar consolas GUI en servidores. El hecho es que los servidores pueden proporcionar un funcionamiento eficiente de las interfaces gráficas sólo a expensas de degradar el rendimiento del servidor. pero usa GUI en los clientes, incluso si estos clientes están conectados al servidor, sigue siendo bastante aceptable hoy en día. Si en nuevas versiones Servidor Windows todas las funciones están disponibles primero con usando PowerShell y sólo entonces (y algunos no están disponibles en absoluto) utilizando la interfaz gráfica del servidor.

Puede descargar PowerShell desde el sitio web de TechNet, pero en los sistemas operativos modernos MS Winodws está disponible de fábrica.

Para más comienzo fácil Al aprender Windows PowerShell, les presento una selección de diversos materiales. Comencemos la lista con un curso en video de 2009:

  • Escribimos el primer script y nos familiarizamos con Windows PowerShell.

Recursos de Internet:

  • Dominar PowerShell - powershell.com

Programas:

  • Explorador de secuencias de comandos para Windows PowerShell ISE. Este complemento hace que sea fácil de encontrar guiones necesarios en TechNet Script Center según criterios y parámetros especificados. Además, contiene un módulo especial Script Analyzer que, después del análisis, sugiere mejoras/cambios que aumentan la eficiencia del guión escrito. Este módulo está disponible como parte de Windows PowerShell ISE que forma parte del sistema operativo Windows. El problema es que Windows Server y PowerShell ISE requieren activación. La licencia en sí es de pago, pero no desesperes. Tendrás unos 180 días para experimentar este producto.
  • Dell PowerGUI- Le permite simplificar la creación de sus propios scripts de PowerShell para elección sencilla cmdlets necesarios que sean adecuados para su tarea y arrástrelos a los lugares correctos. Ideal para quienes son nuevos en PowerShell pero tienen un conocimiento básico de los conceptos. PowerGUI es un editor fácil de usar que probablemente mejorará su comprensión del ensamblaje de scripts más complejos y avanzados, especialmente si aprende mejor la información visualmente.

Una de las fuentes de conocimiento más básicas es la excelente ayuda del programa:

Espero que esta lista de recursos le ayude en su estudio. PowerShell. ¿Qué libros e ideas usaste? ¡Deja tu respuesta en los comentarios y buena suerte para dominar nuevos conocimientos! 😉

En este artículo veremos tecnologías de Microsoft como WindowsPowerShell, hablaremos sobre qué es PowerShell, qué son los cmdlets y una canalización, cómo escribir scripts y módulos, y también tocaremos otras características igualmente importantes y útiles de Windows PowerShell.

¿Qué contribuyó al surgimiento de Windows PowerShell?

Antes de PowerShell, había ( y hay) las siguientes herramientas para la automatización y administración de servicios: línea de comandos de Windows y Windows Script Host. Pero estas tecnologías tienen desventajas.

La línea de comandos de Windows también tiene la capacidad de realizar algunas tareas administrativas y la capacidad de registrar un algoritmo de acciones, guardándolo como un script (archivo bat), mientras que puede utilizar ciertos elementos de programación, por ejemplo, utilizar variables, construcciones condicionales, e incluso algo así como ciclos.

La mayoría de los productos de software tienen una interfaz de consola, es decir. Podemos controlar el programa usando la línea de comando, mientras ahorramos recursos debido a la falta de costos de ejecución de la interfaz gráfica. Microsoft incluso lanza ediciones sin interfaz gráfica para el sistema operativo del servidor Windows Server ( Núcleo del servidor Windows Server 2016 incluso tiene Nano Server), pero todo esto no es suficiente, ya que las capacidades de la línea de comando son limitadas, es decir. No podremos escribir una lógica compleja para automatizar algo, e incluso si pudiéramos, requeriría tiempo y conocimiento.

Además, la desventaja de la línea de comando es que para administrar completamente el servidor utilizamos varias utilidades de consola de productos de software y, por lo tanto, usar la línea de comando para la administración es realmente difícil, desde el punto de vista del hecho de que todas estas utilidades tienen diferentes sintaxis, parámetros, métodos de uso y para realizar tareas típicas, es decir Cada día hay que tener todo esto en la memoria, y para realizar tareas atípicas hay que leer primero la ayuda o documentación.

La tecnología Windows Script Host le permite realizar todas las tareas administrativas como línea de comando, incluida su automatización escribiendo scripts WSH, pero aquí ya podemos usar lenguajes de programación completos ( VBScript y JScript), es decir. Se pueden implementar lógicas y algoritmos complejos. Además, con la ayuda de WSH gestionamos productos de software a través de una interfaz de objetos, es decir, Windows Script Host es mucho más” enfriador» que la línea de comando. Pero esta tecnología Tampoco se convirtió en esa herramienta ideal para administrar y automatizar esta administración para los administradores de sistemas, ya que Windows Script Host requería conocimientos de los lenguajes de programación mencionados anteriormente, lo que en realidad es superfluo para los administradores de sistemas. Los administradores sólo necesitan una herramienta de administración sencilla con la capacidad de programar algunas acciones y profundizar en modelos de objetos No quieren productos de software en los lenguajes de programación VBScript y JScript.

Como resultado, Microsoft necesitaba desarrollar una herramienta de administración para administradores de sistemas que satisficiera al 100 por ciento todas las necesidades de los administradores de sistemas, tanto en términos de capacidades de administración y automatización como en términos de conveniencia y facilidad de uso, así apareció Windows PowerShell.

¿Qué es Windows PowerShell?

WindowsPowerShell es un lenguaje de scripting de Windows y un shell de comandos diseñado para administrar y configurar sistemas operativos Windows. PowerShell se basa en el marco CRL y .NET Framework y, a diferencia de la línea de comandos, que acepta y devuelve texto, Windows PowerShell funciona con objetos. Cada objeto en PowerShell tiene propiedades y métodos que puede usar para manipular esos objetos.

En Windows PowerShell, Microsoft desarrolló el concepto de cmdlets ( cmdlets), que es un sistema de nombres de comandos " Verbo-sustantivo" Este sistema permite a los administradores de sistemas dominar y simplificar rápidamente el trabajo con PowerShell.

CON usando Windows PowerShell puede:

  • Acceder al sistema de archivos;
  • Gestionar el registro;
  • Gestionar servicios;
  • Gestionar procesos;
  • Configurar el sistema operativo;
  • Instalar software;
  • Instalar funciones y componentes del servidor;
  • Administrar y configurar funciones y componentes del servidor;
  • Escribir y utilizar scripts para automatizar la gestión y administración;
  • Realizar otras tareas de administrador del sistema.

Windows PowerShell contiene muchas utilidades y comandos de uso común que puede ejecutar desde la línea de comandos, como ipconfig, ping y otros. Esto se hizo para facilitar la transición de los administradores del sistema desde la línea de comandos a PowerShell.

Además, para mayor comodidad, muchos comandos y utilidades de uso frecuente en PowerShell tienen sinónimos ( Alias), por ejemplo, cls es sinónimo del cmdlet Clear-Host, dir es sinónimo de Get-ChildItem ( la lista completa de sinónimos se puede ver ejecutando el cmdlet Get-Alias ​​​​).

Para simplificar la búsqueda del comando deseado, PowerShell tiene un cmdlet especial Get-Command, con el que puede buscar tanto por verbo como por sustantivo. Todos los comandos de Windows PowerShell están agrupados en módulos ( por ejemplo, Hyper-V, NetTCPIP), lo que también facilita la búsqueda del comando correcto.

Una vez que se haya encontrado el comando requerido, puede consultar las instrucciones para trabajar con este comando, es decir. ayuda, existe un cmdlet Get-Help especial para estos fines; por ejemplo, el siguiente comando mostrará ayuda para el cmdlet Get-Command:

Obtener ayuda Obtener comando

La ayuda en Windows PowerShell puede ser breve y detallada ( parámetro -Detallado), lleno ( parámetro -Completo), y también puede mostrar solo ejemplos ( parámetro - Ejemplos). El siguiente comando solo mostrará ejemplos del uso del cmdlet Get-Command:

Obtener-Ayuda Obtener-Comando -Ejemplos

La ayuda de PowerShell es actualizable, es decir. se puede actualizar con el comando Actualizar-Ayuda.

Versiones de Windows PowerShell

La primera versión de PowerShell 1.0 apareció el 14 de noviembre de 2006 y se lanzó como una distribución separada que podía instalarse en las siguientes versiones de los sistemas operativos Windows: Windows XP Paquete de servicios 2, Windows Server 2003 Service Pack 1 y Windows Vista.

En Windows Server 2008, PowerShell 1.0 venía como un componente que también debía instalarse.

A partir de Windows 7 y Windows Server 2008 R2, PowerShell viene como un componente integral del sistema ( aquellos. preinstalado, no es necesario instalarlo). A continuación se muestra una tabla de correspondencia entre la versión de PowerShell y la versión del sistema operativo Windows ( aquellos. qué versión de PowerShell está instalada de forma predeterminada en qué versión de Windows):

Versión PowerShell Versiones de Windows
PowerShell 2.0 Windows 7, servidor Windows 2008 R2
PowerShell 3.0 Windows 8, servidor de Windows 2012
PowerShell 4.0 Windows 8.1, servidor Windows 2012 R2
PowerShell 5.0 Windows 10, servidor Windows 2016

Con cada nueva versión, PowerShell se convierte en una herramienta de administración cada vez más poderosa; en comparación, el primer PowerShell tenía alrededor de 130 cmdlets, ¡y en PowerShell 5.0 ya hay más de 600!

saber versión actual En PowerShell, puede usar la propiedad PSVersion de la variable incorporada $PSVersionTable; por ejemplo, ejecute el siguiente comando:

$PSVersionTable.PSVersion

O ejecutar el cmdlet

Obtener-Variable -Nombre PSVersionTable –ValueOnly

donde, el valor de PSVersion será la versión de PowerShell.

lenguaje PowerShell

PowerShell es un lenguaje de programación de scripts orientado a objetos. Se utiliza para escribir comandos para controlar todos los componentes del sistema operativo Windows en shell de Windows PowerShell, así como para escribir scripts para automatizar tareas de administración en un entorno integrado. guiones de Windows PowerShell (ISE). Aunque el lenguaje PowerShell fue creado para tareas de administración, es un lenguaje de programación de scripting completo, ya que tiene construcciones de programa que están presentes en todos los lenguajes de programación, tales como: condiciones, bucles, manejo de errores, trabajo con variables, objetos y matrices.

El lenguaje PowerShell tiene una sintaxis uniforme para escribir comandos y una estructura de nombres para estos comandos basada en el principio " Verbo-sustantivo"¿Qué significa idioma dado intuitivo tanto para programadores como para administradores de sistemas.

WindowsPowerShell

WindowsPowerShell es un entorno para ejecutar comandos y scripts en PowerShell. Este shell tiene las mismas capacidades que la línea de comando, tales como: almacenar el historial de ejecución de comandos, personalizar la apariencia del shell, completar la ejecución de comandos con una combinación Teclas Ctrl+C, así como muchas otras funciones que no están disponibles en el shell de línea de comandos, por ejemplo una característica tan maravillosa como " resaltado de sintaxis» ( introducido en PowerShell 5.0).

Hay varias formas de iniciar PowerShell, por ejemplo:

  • Desde la línea de comando escribiendo PowerShell;
  • A través del cuadro de diálogo " Ejecutar» ( método abreviado de teclado Win+R), escribiendo también PowerShell;
  • En Windows 7 - Inicio->Todos los programas -> Accesorios -> Windows PowerShell -> Windows PowerShell;
  • En Windows 8.1 o Windows Server 2012 R2 - Inicio->Todos los programas -> Herramientas del sistema -> Windows PowerShell;
  • En Windows 10 o Windows Server 2016 - Inicio->Todos los programas -> Directorio de Windows PowerShell ( en el grupo W) -> Windows PowerShell.

Ejemplo de ejecución de PowerShell en Windows Server 2016

Captura de pantalla de PowerShell en Windows Server 2016

Cmdlets en PowerShell

cmdlet (cmdlet) es un comando de Windows PowerShell que le permite interactuar con objetos del sistema operativo para administrarlos. Estos comandos son parte lenguaje PowerShell. Los cmdlets se construyen según el principio " Verbo-sustantivo", separados por un guión (-); es decir, primero indicamos qué hacer, y con un guión indicamos qué hacer. Por ejemplo, el cmdlet Get-Help, donde Get es un verbo que significa " Conseguir", y Ayuda es un sustantivo " Ayuda"en el contexto de PowerShell" Mostrar – Ayuda" Los cmdlets de PowerShell devuelven resultados como objetos, que es una de las principales diferencias con el símbolo del sistema de Windows, en el que los comandos solo devuelven texto a la pantalla.

Además de los cmdlets para obtener datos (Get), también existen tipos de cmdlets como:

  • Agregar – agregar datos;
  • Claro – claro;
  • Habilitar – habilitar;
  • Desactivar – apagar;
  • Nuevo – crear;
  • Quitar – quitar;
  • Conjunto – conjunto;
  • Empezar - empezar;
  • Detener – detener;
  • Exportar – exportar;
  • Importar – importar;
  • Y muchos más.

Lista completa Los cmdlets en Windows PowerShell se pueden ver usando el cmdlet especial Get-Command. Por ejemplo, ejecútelo con el parámetro de cmdlet -CommandType y, como resultado, se mostrará una lista de cmdlets en su pantalla.

Cmdlet Get-Command-CommandType

Como ya entendiste, los cmdlets tienen parámetros con los que podemos especificar las acciones del cmdlet. Los parámetros pueden ser obligatorios u opcionales; por ejemplo, el cmdlet Get-Command no tiene parámetros obligatorios.

La siguiente imagen muestra una forma de buscar un cmdlet por verbo ( parámetro verbal). En este caso, mostramos una lista de cmdlets que pueden reiniciar algo.

Equipo

Obtener-Comando -Verbo Reiniciar

Para buscar un cmdlet por sustantivo, debe usar el parámetro Noun. Por ejemplo, a continuación tenemos una lista de cmdlets que funcionan con servicios.

Equipo

Get-Command -Servicio sustantivo

Si no encuentra el cmdlet deseado por su nombre completo, puede usar una máscara en formato *Texto*.

Canalización en PowerShell

Uno de los principales Características de Windows PowerShell puede utilizar una canalización al ejecutar comandos.

Transportador– esta es la transferencia del resultado de un cmdlet a través de una barra vertical (|) a otro cmdlet. Al mismo tiempo, como recordará, en PowerShell los cmdlets trabajan con objetos y los devuelven en consecuencia, los objetos también se transfieren a lo largo de la canalización;

Con la ayuda de un transportador, puede realizar tareas complejas de una manera simple y de una manera conveniente sin la necesidad de escribir scripts y algoritmos complejos.

Por ejemplo, averigüemos el nombre del archivo más grande en el directorio "C:\Windows\System32" ( ejemplo simple de una tubería).

Equipo

Get-ChildItem -Path "C:\Windows\System32" -Archivo | Ordenar-Longitud del objeto -Descendente | Seleccionar-Objeto-Primero 1

  • Get-ChildItem: cmdlet para obtener objetos en el directorio especificado;
  • Sort-Object es un cmdlet para ordenar objetos, en nuestro caso ordenamos por tamaño de archivo ( longitud -Descendente);
  • Select-Object es un cmdlet para seleccionar las propiedades deseadas de un objeto; en nuestro caso, mostramos campos estándar y solo el primer objeto, es decir. archivo grande ( parámetro -Primero 1).

Todos los cmdlets están separados entre sí por una barra vertical. El resultado de cada cmdlet se pasa como entrada a otro cmdlet, es decir. Primero obtenemos todos los objetos en el directorio especificado, luego ordenamos el resultado y finalmente seleccionamos el primer objeto.

Ejecución de tareas en segundo plano.

Windows PowerShell tiene la capacidad de ejecutar trabajos en segundo plano, que es un mecanismo mediante el cual puede ejecutar un comando ( por ejemplo, que tarda mucho en completarse) V. fondo, es decir. Después del lanzamiento, regresa a la sesión actual y puede continuar trabajando sin esperar a que finalice el comando. Necesitará esta función cuando necesite ejecutar un comando cuyo trabajo requiera bastante tiempo. por mucho tiempo Y, como sabes, durante este tiempo la sesión de PowerShell se bloquea hasta que se completa el comando y debes continuar trabajando.

Puede administrar todas las tareas que se ejecutan en segundo plano, por ejemplo, ver la lista de tareas, detener la tarea, eliminarla y, por supuesto, ver el resultado de la tarea.

Windows PowerShell tiene los siguientes cmdlets para trabajar con trabajos en segundo plano:

  • Iniciar trabajo: inicia una tarea en segundo plano;
  • Stop-Job: detener una tarea en segundo plano
  • Get-Job: ver la lista de tareas en segundo plano;
  • Recibir trabajo: ver el resultado de ejecutar una tarea en segundo plano;
  • Remove-Job: elimina una tarea en segundo plano;
  • Wait-Job: mueve una tarea en segundo plano al primer plano para esperar a que finalice.

Para ejecutar en segundo plano, debe escribir el comando Iniciar trabajo y, entre llaves (), un comando o conjunto de comandos que desea ejecutar en segundo plano.

Por ejemplo, ejecutemos alguna tarea ( mostrar lista de servicios) en el fondo, luego mira la lista trabajos de fondo y mostrar el resultado de nuestra tarea en la pantalla ( aquellos. lista de servicios).

Ejecutar una tarea en segundo plano

Iniciar trabajo (Obtener servicio)

Miramos la lista de tareas que se ejecutan en segundo plano.

Mostrando el resultado de Job1

Recibir-trabajo Trabajo1

Como puede ver, ahora tenemos una tarea con el estado " Terminado", es decir. ya ha completado ( Get-Service simplemente funciona rápidamente).

Para ver el resultado de la tarea en segundo plano, es decir cmdlet Get-Service, ejecutamos el comando Recibir-Trabajo y le pasamos el nombre del trabajo ( el valor del identificador también es posible). Como resultado, mostramos una lista de servicios.

Control remoto mediante PowerShell

Windows PowerShell está diseñado no sólo para uso local, pero también para la ejecución remota de comandos. Esta característica es necesaria para que pueda controlar computadoras remotas desde su lugar de trabajo, es decir. ejecute comandos de PowerShell.

Existen varios métodos de control remoto:

  • Usando el parámetro –NombreEquipo (muchos equipos lo tienen). En otras palabras, pasas el nombre de la computadora en la que deseas ejecutar el comando como parámetro. El método tiene la desventaja de estar limitado a la ejecución de un comando;
  • Usando sesiones. cmdlet Enter-PSSession (sesión interactiva). De esta manera te conectas a computadora remota y todos los comandos que escribirás PowerShell, se ejecutará en la computadora remota de la misma manera que si estuviera escribiendo comandos directamente en la computadora remota. El método también tiene la desventaja de que la sesión está limitada a una computadora;
  • Usando un cmdlet Comando de invocación. Al usar este método Puede ejecutar comandos o scripts en una computadora o en varias.

Por ejemplo, para conectarse a una computadora remota ( en el siguiente ejemplo NombreDeServidor) en una sesión interactiva, ejecute el siguiente comando:

Ingrese-PSSession ServerName

Scripts, funciones y módulos en Windows PowerShell

Si ha escrito un algoritmo, lo más probable es que desee guardarlo para utilizarlo en el futuro. Windows PowerShell tiene un mecanismo de secuencias de comandos para este propósito.

la esencia este mecanismo A continuación, escribe el conjunto de comandos que necesita y lo guarda como un script; este es un archivo de texto simple con la extensión .PS1.

Luego, para ejecutar este script, simplemente ejecútelo en PowerShell. En este caso, debe especificar la ruta completa al archivo de secuencia de comandos o ir al directorio con la secuencia de comandos y llamarlo por su nombre.

¡Importante!

¡De forma predeterminada, está prohibido ejecutar scripts en Windows! Para ver la política de ejecución de scripts, ejecute el cmdlet Get-ExecutionPolicy. Como resultado, devolverá la política actual, por ejemplo:

  • Restringido: la ejecución de cualquier script está bloqueada ( valor predeterminado);
  • AllSigned: se permite la ejecución de scripts que tengan una firma digital;
  • RemoteSigned: se permite la ejecución de scripts locales, todos los scripts descargados deben tener una firma digital;
  • Sin restricciones: se permite la ejecución de cualquier script ( ¡No se recomienda porque no es seguro!).

Para permitir la ejecución de scripts, debe utilizar el cmdlet Establecer política de ejecución con uno de los parámetros anteriores.

Por ejemplo, para permitir la ejecución de scripts locales, ejecute el siguiente comando y acepte los cambios presionando Y.

Set-ExecutionPolicy RemoteSigned

Puede pasar parámetros a un script, hacerlos obligatorios o establecer un valor predeterminado.

Windows PowerShell proporciona un mecanismo para crear sus propias funciones que, al igual que los cmdlets integrados, se pueden usar en el shell de PowerShell.

Para ello es necesario especificar palabra clave Función y luego entre llaves () escriba el algoritmo para esta función, es decir conjunto de comandos ( por ejemplo, algún procedimiento de uso frecuente: crear un usuario con ciertos derechos, limpiar ciertos directorios, etc.). Luego necesitas guardar todo esto en un script, pero solo con la extensión .psm1, ya que este archivo ya será un módulo.

Eso no es todo, este archivo debe colocarse en el directorio donde PowerShell busca módulos. Hay varios directorios de este tipo ( directorio especial en el perfil de usuario, el directorio donde está instalado PowerShell), se pueden ver en las variables de entorno de PowerShell. Para hacer esto, ejecute el siguiente comando

Get-ChildItem Env:\PSModulePath | Formato-Tabla -AutoSize

Una vez que coloque el módulo que escribió en un directorio especial, podrá acceder a sus funciones como comandos normales de PowerShell.

Entorno de secuencias de comandos integrado (ISE) de Windows PowerShell

Para que sea conveniente escribir scripts, funciones y, en consecuencia, módulos, empresa microsoft desarrolló un programa de gráficos especial Entorno de secuencias de comandos integrado(ISE) - Entorno de secuencias de comandos integrado. Es muy conveniente trabajar en este programa y también tiene una potente funcionalidad ( creación de múltiples pestañas con scripts, área de salida, depurador incorporado y más).

Puedes ejecutarlo así:

  • En Windows 7 - Inicio->Todos los programas ->Accesorios ->Windows PowerShell -> Windows PowerShell ISE;
  • En Windows 10 o Windows Server 2016 - Inicio->Todos los programas -> Directorio de Windows PowerShell ( en el grupo W) -> Windows PowerShell ISE.

¡Nota! ISE no funcionará en sistema windows Servidor instalado en la versión Server Core.

Captura de pantalla del entorno de scripting integrado (ISE) de PowerShell en Windows Server 2016

Eso es todo para mí, ¡espero que el material te haya sido útil! ¡Buena suerte!

PowerShell 5.0 viene con Windows 10, pero para sistemas operativos anteriores nueva versión se lanzó como parte de Windows Management Framework 5.0 sólo a finales de febrero y en el segundo intento. Hoy hablaré sobre algunas de las nuevas funciones, pero comenzaré explicando por qué es posible que necesite PowerShell.

¿Por qué necesitas PowerShell?

No tiene sentido aprender PowerShell así, y esto es válido para cualquier lenguaje: scripting, software e incluso humano. Como muchos Soluciones de Microsoft PowerShell se creó pensando en el negocio de automatizar las tareas de administración de PC y servidores en las organizaciones.

El lenguaje de secuencias de comandos se basa en la poderosa plataforma de software .NET, por lo que las capacidades de PowerShell se extienden mucho más allá de la administración.

Una vez tuve que eliminar una columna de un conjunto libros de excel 2013. Hecho a mano Estaba disgustado y buscar en Google no me dio una solución preparada. Creé un tema en el foro (sí, a veces también hago preguntas en OSZone :). Cualquier idioma era adecuado para mí, pero la solución inesperadamente resultó ser PowerShell. Al final resultó que, puedes cargar Excel como un objeto COM y manipularlo más.

Posteriormente, utilicé más de una vez una modificación de ese script para actualizar automáticamente docenas de libros de Excel que extraían datos de otros archivos. Esto me ahorró mucho tiempo y esfuerzo.

Creo que la idea está clara y ahora podemos pasar a las nuevas funciones de PowerShell 5.0.

8 funciones útiles

Resaltado de sintaxis

EN nueva consola¡Mucho más fácil de navegar!

El color rojo y la numeración de las líneas, sin embargo, pertenecen a otra ópera.

Busca en la historia en dos direcciones

Atajos de teclado: Ctrl + R y Ctrl + S
Cmdlets: Get-PSReadlineKeyHandler Y Set-PSReadlineKeyHandler

Al igual que CMD, PowerShell tiene un historial de sesiones con flechas de navegación, un Obtener historial muestra un registro similar a F7. Se puede mostrar una lista completa de atajos de teclado relacionados con el registro de la siguiente manera:

Get-PSReadlineKeyHandler | ? ($_.función -como "*hist*")

Hay dos nuevas funciones de búsqueda de historial en los resultados, que se muestran en la imagen a continuación. Funciona de forma muy sencilla.


A diferencia de Get-History, que contiene el historial de la sesión actual, este historial se mantiene globalmente y se guarda cuando se cierra la ventana.

Gracias por el consejo a Anton Drovosekov y Konstantin Sidyakin de nuestro grupo VK.

Creando conexiones, vínculos simbólicos y físicos.

Cmdlets: Nuevo artículo, Quitar artículo, Get-ChildItem

Tengo muchas historias en mi blog, así que no podía ignorar la posibilidad de crearlas en PowerShell.

#Enlace simbólico al archivo New-Item -ItemType SymbolicLink -Path C:\test\MySymLinkFile.txt -Target C:\test\1.txt #Enlace simbólico a la carpeta New-Item -ItemType SymbolicLink -Path C:\test \MySymLinkFolder -Target C:\Windows\ #Vínculo duro al archivo New-Item -ItemType HardLink -Path C:\Test\MyHardLinkFile.txt -Target C:\test\1.txt #Conexión New-Item -ItemType Junction -Path C: \Temp\MyJunctionDir -Destino C:\Windows

Para ser justos, la sintaxis del comando es enlace mk Es más fácil de recordar, por lo que podría ser más rápido así:

Ejemplo "mklink /d C:\test\MySymLinkFolder C:\Windows"

Creando un archivo temporal

CMDLET: Nuevo archivo temporal

En los scripts, a menudo es necesario crear un archivo temporal para colocar información allí. Se crea un nuevo cmdlet solo para esto.

#Crear un archivo temporal New-TemporaryFile #Crear un archivo temporal y obtener su ruta completa $tmpfile = (New-TemporaryFile).FullName $tmpfile

Rara vez hago una instalación limpia del sistema principal, pero ocurre regularmente en las máquinas virtuales. Y OneGet es muy conveniente para instalar automáticamente rápidamente un conjunto clave de programas.

Nota. Puede utilizar este módulo sin instalar WMF 5.0. Una versión preliminar del módulo para PS 4.0 y 3.0 está disponible por separado (marzo de 2016) y busque versiones más recientes en el centro de descargas para la vista previa de los módulos PackageManagement PowerShell.

Instalación de programas

Este ejemplo instala cuatro programas y un conjunto completo de utilidades del repositorio de Chocolatey. Los primeros tres comandos se ejecutan una vez y se debe confirmar el cambio de política. El cuarto comando instala silenciosamente los programas enumerados y el quinto simplemente ahorra tiempo.

#Permitir la instalación de paquetes firmados desde Internet Set-ExecutionPolicy RemoteSigned #Instalar el proveedor Chocolatey Get-PackageProvider –Name Chocolatey -ForceBootstrap #Hacer que Chocolatey sea confiable Set-PackageSource -Name Chocolatey -Trusted #Instalar programas Install-Package NotepadPlusPlus, vlc, firefox, filezilla, sysinternals -Verbose -Force -ProviderName chocolatey #Agregar ruta a los archivos ejecutables (sysinternals) a PATH setx PATH "$env:path;C:\Chocolatey\bin" -m

El proveedor descarga un paquete en C:\Chocolatey\lib, que se basa en el script chocolateyInstall.ps1. Descarga el instalador del programa desde el sitio web oficial en la carpeta %temp%\Chocolatey y lo ejecuta en modo de instalación silenciosa. El ejemplo más simple– Bloc de notas++.

Install-ChocolateyPackage "notepadplusplus" "exe" "/S" "https://notepad-plus-plus.org/repository/6.x/6.9/npp.6.9.Installer.exe"

Programas de búsqueda

Hay muchos programas en los repositorios, definitivamente todos los más populares están ahí.

Buscar paquete "*zip*","*commander*" -ProviderName Chocolatey

Desinstalar programas

Sin embargo, a la hora de eliminar aplicaciones no todo es tan sencillo.

Paquete de desinstalación -nombre filezilla

Idealmente, eliminar un paquete debería dar como resultado la eliminación silenciosa del programa, pero la implementación depende del autor del paquete y de las capacidades del instalador. En la práctica, algunos paquetes no contienen scripts de desinstalación, otros vienen con muletas en forma de scripts AutoHotkey y otros simplemente inician la desinstalación de forma interactiva, pidiéndole que complete el proceso manualmente. Sin embargo, si el instalador es MSI, la eliminación funciona sin problemas.

Enlaces relacionados a OneGet y la instalación silenciosa:

  • Guía paso a paso para instalar programas desde PowerShell (Dmitry Bulanov)
  • Tipos de instaladores y claves de instalación silenciosa (mi artículo de 2005 es bastante relevante :)
  • Sitio de instalación automática de Windows y foro de instalación automática de programas

Discusión y encuesta

Para programadores y administradores de sistemas experimentados, hay otros en PowerShell 5.0 oportunidades interesantes(por ejemplo, clases similares a los lenguajes de programación orientados a objetos). Puede encontrar la lista completa en esta página de TechNet (el enlace conduce específicamente a la versión en inglés, ya que la rusa aún no contiene información sobre 5.0).

Podrás marcar fragmentos de texto que te interesen, que estarán disponibles a través de enlace único en la barra de direcciones del navegador.

Sobre el autor

El resaltado de sintaxis en PowerShell 5.0 es el módulo PSReadLine predeterminado. EN versiones anteriores puede instalarlo adicionalmente y agregarlo a la carga en el script de perfil (la variable $profile) o cargarlo usted mismo cuando sea necesario

Módulo de importación psreadline

¿Puede contarme más sobre la instalación silenciosa desde scripts? No hace mucho comencé a usar chocolatey, me gusta mucho, sobre todo actualizar todos los programas con un solo comando. Hasta que descubrí la instalación silenciosa, puse todo en modo manual, comando-confirmar-instalar.

6yHTapb

Lo único para lo que necesitaba PowerShell en Win 10 hasta ahora era solucionar un error con botón roto"propiedades" en la configuración Conexiones VPN. Set-VpnConnection -Nombre "Nombre" -SplitTunneling $true.
Por cierto, Vadim. ¿Hay alguna información sobre esto? se trata de sobre el botón en Propiedades de VPN conexiones - red - IP versión 4 - “propiedades”. Allí normalmente puedes desmarcar la casilla de verificación "usar una puerta de enlace en una red remota". El botón en sí está activo, pero cuando se presiona no sucede nada. Aquí es donde PowerShell resultó útil.

Serguéi Roshchin

Muchas gracias por chocolate
En Windows 7, según tengo entendido, ¿no funciona?

Lecrón

Al votar... utilizo casi todas las opciones. Algunos programas están en formato portátil. Parte: instalada manualmente desde el disco, para aquellos que pueden actualizarse por sí mismos o que han realizado modificaciones importantes durante mucho tiempo. De estos, algunos están escritos. Algunos son nuevos. Parte de ella ya está preinstalada en la imagen.
Nuevamente, los clientes y las tareas varían.

Acerca de PowerShell... Creo que Microsoft no acertó con el nombre. A primera vista no está claro qué pasó. Shell de comandos/procesador o lenguaje de programación de scripts. La palabra Shell sugiere lo primero, pero ya es hora, ya que es tan genial, de convertirlo en el predeterminado o al menos promocionarlo como el principal. Pero los casos de uso reales apuntan más hacia lo segundo, reemplazar el WSH.

  • Lecrón: pero entonces ya es hora, ya que es genial, de convertirlo en el predeterminado o al menos promocionarlo como el principal.

    En Win+X, puede reemplazar CMD con PS (propiedades de la barra de tareas - navegación). Y lo han estado promoviendo como el principal durante mucho tiempo: durante mucho tiempo no ha habido nada nuevo en TechNet sobre CMD, solo PS.

    Ciertamente, público objetivo- Especialistas en TI, pero lo mismo puede decirse de CMD y WSH. Pero no veo ningún daño para el público objetivo de mi blog. Encuentro uso para PS en casa y en el trabajo, y no implica administración.

    • Lecrón

      No estoy hablando de daño. Y sobre malentendidos y errores correspondientes.
      ¿Qué es? ¿Cómo lo ve Microsoft? El procesador de comandos, que normalmente funciona en interactivo modo, que también Tal vez

      Trabajar interactivamente en una sintaxis y semántica y escribir secuencias de acciones en otras es ridículo. Este es el principal problema. Tan profundo que ni siquiera tú lo notas, aunque lo mencionas indirectamente en el artículo. La sintaxis de mklink no es más simple, pero sí más familiar. Desde artículo nuevo, con unido sintaxis, te permite crear muchísimas cosas. Y ahora, de hecho, su sintaxis es más sencilla que conocer muchas utilidades individuales, incluidos sus nombres.

      La promesa se cumplió: aquí hay un módulo para administrar administradores de paquetes, adelante.

      No entendí. ¿Qué es un “módulo de gestión de gerentes”?

        • Lecrón

          Me parece que aquí es donde rebuscó el perro. En proveedores. Cuando no existe un enfoque uniforme para la gestión de paquetes. De hecho, el usuario tiene que saber y tener en cuenta qué proveedor está utilizando. Y no sólo para los usuarios, sino también para los mantenedores.

          La función, como es habitual, está dirigida a organizaciones y MSI y MSU son totalmente compatibles.

          Lecrón

          Quizás no entendí toda la profundidad de esta característica, razón por la cual afirmaciones tan estúpidas.
          ¿Necesitará el usuario pasos adicionales si el propietario del repositorio/paquete cambia de proveedor? ¿O el creador del paquete cambiará su configuración? ¿O el administrador de paquetes se encarga de todo esto?

          Hm... aquí tienes una función: tómala, pruébala, descúbrela; te ayudará a resolver algunas preguntas. Hay un proveedor, tiene paquetes en el repositorio. ¿Eliminaste un paquete específico? Entonces no podrás descargarlo de este proveedor. Pero el paquete que ya se descargó permanece localmente y se puede administrar más adelante.

          Lecrón

          Por cierto, aquí hay otra pregunta. ¿Existe un comando Actualizar paquete, o mejor aún, Actualizar todo paquete?

          Hola. Dime, ¿es posible restaurar el arranque o la BIOS y cómo hacerlo? El gestor de arranque de Windows 7 Pro falló. Ya cambié la configuración en el arranque pero Windows no quiere arrancar. Anteriormente, se presentó Windows 8.1 en el servicio; instalaron Windows 7 Pro sin mi consentimiento. ¡Ayuda a resolver el problema!

alexei

He oído hablar muchas veces del chocolate y, como me lo recordaron, finalmente decidí probarlo. el resultado no fue particularmente impresionante.

Instalé masivamente un conjunto de software ya instalado en la PC. sólo alrededor del 70% se encontró en el repositorio.
teclas -y -aceptar-licencia -f -x - Fumé maná solo por un par de minutos, tal vez no entendí algo.
resultado:
Software que no pedí: autoIT, autohotkey. ¿Para qué?
descargué la versión anterior de Acrobat Reader DC, motor de trampas;
no se pudo descargar dropbox virtualbox;
el modo silencioso no funcionó viber, wirehark, aleación ligera; tuve que marcar las casillas y seguir presionando;
Skype eliminó el antiguo, pero no instaló el nuevo.
y algunos de los atajos no se crearon, ahora debes recordar cuáles.

Advertencias:
- AdobeReader
- vista de viento
- firefox
-bloc de notasplusplus
—visor de equipo

No entiendo cuáles son los errores aquí.

en sistema limpio en cualquier caso, tendrás que descargar el resto del software a mano o instalar uno que ya no sea compatible desde el archivo.
Además, es raro, pero en algunos lugares durante la instalación es necesario seleccionar ciertas configuraciones: la composición de los paquetes, etc. aquí esto sólo se puede implementar mediante scripts para cada producto, lo que no ahorra mucho tiempo en casa. Dado que todas estas opciones pueden cambiar, y cambian de una versión a otra, es necesario monitorear y reescribir los scripts. no suena muy bien.
Si pudiera escanear el registro y agregarlo a la base de datos o al software GUI para seleccionarlo, sería más fácil. De lo contrario, primero deberá dedicar tiempo a compilar una lista para la instalación; para estar seguro, revisé cada producto para indicar el nombre correcto del paquete.

  • serguéi

    PS C:\Users\Gerald> Find-Package "*paint.net*" -ProviderName Nombre chocolatey Versión Fuente Resumen ---- ------- ------ ------- paint .net 4.0.6 chocolate Paint.NET es imagen y Software de manipulación de fotografías diseñado para ser utilizado en computadoras que...

    Precisamente hoy me encontré con la mención de Chocolatey en Habrahabr por primera vez y allí mismo, en su boletín. ¡Parecía que esto era todo! Pensé que habría un increíble reemplazo con script para la instalación automática de software gratuito desde ninite.com, pero, ¡ay! La relevancia del software no se apoya en un nivel paranoico y los problemas son los descritos por los participantes anteriormente.

    vitaly

    Creo que la filosofía UNIX se adapta mejor a la consola:


    Escribir programas que funcionen juntos.
    Escriba programas que admitan secuencias de texto porque es una interfaz universal.

    • Vitaly, ¿Windows incluye una utilidad de consola para ZIP? Esto se hace para simplificar los scripts de PowerShell; no es necesario acceder a CMD, ayuda integrada, etc.

      • Lecrón

        ¿Por qué molestarse con cmd si ambos shells deben iniciar archivos ejecutables de forma independiente y administrar su entrada/salida?
        No me opongo a la inclusión de dicha funcionalidad, especialmente si se hace sabiamente, como una interfaz para zlib, y no simplemente como otra ampliación del código base: una cosa en el explorador, otra en el shell, un tercero en cmd. .

        vitaly

        No, no está incluido.
        Pero en mi hosting, cuando intenté usar zip por primera vez, recibí algo como "zip no está instalado". Instalar con apt-get install zip."

        ¿Ir a cmd? Se dijo anteriormente que PS debería ejecutar binarios.

        ¿Referencia? EN equipo de linux man %util_name% o %util_name% -?, el primero da manual detallado, segundo como breve información por parámetros. Parece funcionar en todas partes.

        Como resultado, el intérprete de comandos en Linux es algo simple y poderoso, hay muchas alternativas, ya que no tiene nada complicado, simplemente ejecuta programas, controla el flujo de salida e interpreta la sintaxis más simple.

        arrasar

        Vadim Sterkin: Vitaly, ¿Windows incluye una utilidad de consola para ZIP?

        Me da vergüenza preguntar: ¿no habría sido más fácil agregarlo que agregar la funcionalidad incorporada?

  • Herz Mein

    > ¿Por qué el shell debería trabajar con archivos utilizando sus propios medios?

    Si existe esa posibilidad inherente a las clases .Net, ¿por qué no utilizarla? Es simplemente un enfoque diferente al de bash o cmd, que son intérpretes de línea de comandos. CLI. Y PowerShell es más bien un depurador de scripts, en mi humilde opinión.

    artem

    Lecrón¿Qué es? ¿Cómo lo ve Microsoft? El procesador de comandos, que normalmente funciona en interactivo modo, que también Tal vez¿Leer comandos de un archivo llamado script? ¿O como lenguaje de programación que tiene su propio REPL? ¿Estás de acuerdo en que hay una gran diferencia?

    Está claro que las tareas son diferentes. Pero no veo ninguna contradicción entre ellos. Aquellos. Es muy posible cubrir ambas necesidades con una sola herramienta. Esto es por lo que se esfuerza PowerShell. Algunas cosas salen bien y otras no tanto. Pero la visión es clara.

    artem

    Vadim Sterkin:
    Y lo han estado promocionando como el principal durante mucho tiempo: durante mucho tiempo no ha habido nada nuevo en TechNet sobre CMD, solo PS.

    Será pronto, supongo. CMD (el propio shell) ahora ha comenzado a perfeccionarse de manera relativamente activa. Aunque antes no lo tocaron en absoluto durante diez años.

    artem

    vitaly Escribe programas que hagan una cosa y la hagan bien.

    No veo ninguna contradicción. En PowerShell, cada cmdlet hace una cosa (con muy pocas excepciones). Quien diga que Expand-Archive puede grabar DVD o hacer café, que sea el primero en tirarme una piedra.

    vitaly Escribir programas que funcionen juntos.

    Aquí PowerShell hace todos los shells que conozco, porque... opera con objetos, no con texto. Aquellos. “trabajar juntos” (pasar datos entre cmdlets) es mucho más eficiente. No hay necesidad de perder el tiempo analizando el texto y tratando de explicarle al siguiente equipo qué es exactamente este texto.

    vitaly Escriba programas que admitan secuencias de texto porque es una interfaz universal.

    También se admiten transmisiones. Y si sólo necesita transferir una prueba, no hay problema con eso.

    Es decir, PowerShell sigue plenamente la filosofía anterior.

    vitaly Por ejemplo, ¿por qué poner "Creación de conexiones, enlaces físicos y simbólicos" en PS con su propia sintaxis si existe mklink? ¿Por qué aparece "Crear y descomprimir archivos" si existe zip y sus análogos?

    Sí, porque los comandos especificados son "análogos a zip". De hecho, la respuesta a esta afirmación es muy sencilla. Sólo necesita darse cuenta de que los cmdlets no son capacidades integradas del shell, sino comandos externos. Y todo encaja inmediatamente. Es normal que tengamos comandos para realizar algunas acciones, ¿verdad? Esto es válido tanto para PowerShell como para cualquier otro shell.

    Sí, hay una pequeña cantidad de cmdlets que vienen con el shell predeterminado. Pero ideológicamente no se diferencian de aquellos cmdlets que aparecen por separado al instalar los componentes correspondientes de Windows o que incluso son proporcionados por desarrolladores externos.

    • Lecrón

      artem: Es normal que tengamos comandos para realizar algunas acciones, ¿verdad? Esto es válido tanto para PowerShell como para cualquier otro shell.

      Shell... gran parte de esta palabra... empezó a distorsionarse bajo la influencia de la EM.
      Todo el tiempo creí que los comandos no dependen del entorno de inicio, y que los comandos integrados en el entorno solo son necesarios para dar servicio a las capacidades del entorno en sí, y no a objetos de terceros. ¿Estaba realmente equivocado?
      Desde este punto de vista, PS empieza a parecerse a ACDSee y Nero.

      vitaly

      Aquí PowerShell hace todos los shells que conozco, porque... opera con objetos, no con texto. Aquellos. “trabajar juntos” (pasar datos entre cmdlets) es mucho más eficiente.

      Dudo que todas las utilidades de terceros admitan estos mismos objetos. Pero el texto es compatible con cualquier utilidad que funcione en la línea de comando.

      Sólo necesita darse cuenta de que los cmdlets no son capacidades integradas del shell, sino comandos externos. Y

      ¿Por qué entonces estos cmdlets tienen su propia sintaxis? Bueno, no parece que sean comandos externos.

      • artem

        vitaly: Dudo que todas las utilidades de terceros admitan estos mismos objetos.

        Utilidades de terceros: no, por supuesto. Pero los cmdlets de terceros son fáciles. Yo diría que alrededor del ochenta por ciento de los cmdlets de terceros funcionan bastante bien con objetos.

        Si no hay ningún cmdlet y tiene que ejecutar la utilidad (archivo ejecutable), entonces, por supuesto, debe alimentarlo con texto como entrada. Pero el texto es fácil de obtener del objeto (expandiendo propiedad requerida, Por ejemplo). Entiendo que esto suene abstruso, pero después de adquirir una masa crítica de experiencia, resulta completamente intuitivo.

        vitaly: ¿Por qué entonces estos cmdlets tienen su propia sintaxis? Bueno, no parece que sean comandos externos.

        No podría estar más de acuerdo con esto. "No parece" es la palabra correcta :)

        Como dije anteriormente, es necesario algo de tiempo para acostumbrarse a PowerShell. Y ahora diré algo desagradable sobre nuestros evangelistas y MVP, pero el abuso de alias (dir en lugar de Get-ChildItem, md en lugar de New-Item -ItemType "Directorio", signo de porcentaje en lugar de Foreach-Object o pregunta en lugar de Where-Object, etc., y también omitir los nombres de los parámetros en el caso de que funcione el valor predeterminado) solo confunde a las personas que no están preparadas. Por eso, entre otras cosas, me llevó años acostumbrarme a PowerShell. Me parece que si todos los comandos de ejemplo publicados en blogs y foros contuvieran sintaxis completa, entonces los principiantes experimentarían mucho menos dolor anal.

    De hecho, uso 2 opciones: implementar una copia de seguridad realizada inmediatamente después de configurar el sistema o configurar propia asamblea Windows 7, donde incluyo todas las configuraciones y programas necesarios.
    Y con Win10 todavía no domino el administrador de paquetes, aunque su presencia provoca un gran entusiasmo.
    Solía ​​​​jugar con diferentes gerentes paquetes para Windows, pero por una razón u otra todos eran inconvenientes en términos de "tiempo para dominar"/"tiempo para descargar manualmente". Resultó más fácil hacer tu propio montaje que crear scripts.

    Evgeny Kazantsev

    Una iniciativa maravillosa, vi cómo instalar un paquete de programas necesarios con un solo script, usé ninite, no me impresionó mucho, ahora uso WPI descargado de torrents, la ventaja de ellos es que hay muchos más y reales. instalación automática, menos el hecho de que debe confiar en el autor del reempaquetado.
    Una cosa que no entiendo es cómo ACTUALIZAR los programas instalados de forma completamente automática, que es una característica básica clave de cualquier administrador de paquetes. ¿Cómo puedo hacer que el mismo Notepad++ se registre automáticamente como la aplicación predeterminada sin tener que entrar en la terriblemente incómoda configuración "nueva, son modernas"? ¿Cómo funciona el sistema de dependencia? ¿Existe?

    ¿Qué pasa si lo diseñas como un script o una función? Por ejemplo, así (sin verificar la existencia y sin convertir a rutas completas, lo cual es necesario):

    Param ($create, $extract, $path, $zip) función add-type -assembly system.io.compression.filesystem create-zip ($path, $zip) ( ::createfromdirectory($path, $zip) ) extraer-zip ($zip, $ruta) ( ::extracttodirectory($zip, $ruta) ) if ($create) ( crear-zip $ruta $zip ) if ($extract) ( extraer-zip $zip $ruta )

    Llame en consecuencia:

    .\test -c -p "C:\Alguna\Carpeta" -z "D:\Carpeta\out.zip" # Para crear.\test -e -p "C:\Alguna\Carpeta" -z "D: \Carpeta\out.zip" # Para extraer

    • ¿Qué tiene que ver el diseño con eso? Está utilizando clases .NET directamente en su función. El cmdlet elimina la necesidad de acceder a las clases. Ésta es la diferencia. Más o menos lo mismo que entre un programador y un especialista en TI.

      artem

      Trolebús hecho con una barra de pan.jpg

      Según tengo entendido, nadie discute el hecho de que las funciones pueden hacer cualquier cosa :) El beneficio, obviamente, es que ahora específicamente para esta acción función separada no es necesario escribir. Esto significa, en primer lugar, que será más fácil de usar para las personas (especialmente si no saben cómo escribir funciones o no pueden permitirse importarlas cada vez) y, en segundo lugar, habrá más estandarización. Esta es una bendición indudable. De acuerdo, es una estupidez cuando cinco scripts requieren que cinco autores diferentes descompriman los archivos, y cada uno resuelve este problema de manera un poco diferente. (Por ejemplo, en un momento fue popular la opción a través del objeto COM no documentado del Explorador de Windows).

    lesha

    Trabajo en Windows y Mac, y si configuro un servidor, entonces Linux. Reinstalé OS X por completo un par de veces, pero todo es simple: seleccioné la fecha en TimeMachine entre 10 y 15 minutos y el sistema está listo.
    En Windows la mayoría de mis programas son portátiles, solo instalo Chrome porque de lo contrario el paquete de software de Adobe no se actualiza, por lo que desde la versión CC se descargan a través de Cretive Cloud. No veo el sentido de construir un jardín con automatización. PowerShell puede ser bueno, pero no tengo nada que automatizar en Windows, y para Linux y OS X está bash, que he estado usando durante mucho tiempo.
    Si un amigo me pide "reinstalar Windows por mí, de lo contrario hay algún error", instalo el sistema con unidad externa a su manera "patentada", y dejar que él mismo haga el resto



  • 
    Arriba