Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Meta

#2201


Curso Visual Basic 6


Tamaño: 6.12 Megas en un .rar y están en PDF.

Descarga:
http://web.omnidrive.com/APIServer/public/mvHhs5rnc8UkITyy8EwZZhrF/CursoVisualBasic.rar
#2202
...
#2203
Scripting / Re: acentos en un bat
6 Agosto 2007, 11:59 AM
Este me gusta más.
#2204
Scripting / Re: Power Shell
6 Agosto 2007, 11:55 AM
Hola:

El link te lo ponde desde el principio.

Lo pongo otra vez.


http://web.omnidrive.com/APIServer/public/abBQfIxKNWBSv0FZPZiACLK1/powershell_pdf_es.zip

Lo de arriba es para que lo vean por el aire y convensas a los curiosos indesisos.

Los manuales los convertí en PDF, más fácil de leer.
#2205
.NET (C#, VB.NET, ASP) / Re: Manuales de .NET
6 Agosto 2007, 11:50 AM
Visual C# .NET 2005

Muy bueno con videos incluidos y todo en español.


http://www.desarrollaconmsdn.com/msdn/Cursos/Curso_Introduccion_a_.NET_con_CSharp/index.html
#2206
Cita de: [VolkS] en  1 Agosto 2007, 02:31 AM
Porque es el lenguaje universal..... y todos se llevan mejor con el :P

¿tendrías algún problema ponerlo en dos lenguas?

Español y inglés.
#2207
Scripting / Re: acentos en un bat
6 Agosto 2007, 00:03 AM
Hay un truco y si te funciona me avisas ¿Ok?

Vete a "Inicio", luego "Ejecutar..." y escribes "edit", al final pulsa aceptar.


Te saldrá una pantalla azul.


En "Archivo", "Abrir", busca el TXT.

******************

Mejor otro método más cómodo.

En en escritorio de Windows, pulsa conel botón derecho del ratón, selecciona "Nuevo" y después crear "Acceso directo".

Escribes la palabra edit y le das siguiente, después pon o deja el nombre como está que se llama Editor de MS-DOS y pulsa "Finalizar".

Coge tu archivo TXT y arrastralo a ese acceso directo y aparecerá una ventena azul con el código de tu Batch.

Desde ahí escribe tu código y escribes palabras con tildes. Lo guardas y ya tienes las palabras con tilde.

Al abrir el TXT normal con el notepad, verás que las palabras con tildes se ven símbolos raros.

NO LO TOQUES, es así ya que lo has escrito correctamente en el truco de arriba, a travez de la pantalla azul. Déjalo así que al funcionar el batch las tildes se verán bien.


Pruébalo  y avisame a ver si te funciona. ¿Vale?

Suerte...
#2208
Cita de: _Bj0rD_ en 10 Abril 2007, 02:40 AM
miren me dejaron este programa muy sencillo pero ya me dolio la cabeza de tanto pensar xD

2.    Cálculo de capacidad de un disco duro.
Haz un programa que pida por pantalla la cantidad de cilindros, pistas en el cilindro y sectores por pista de un disco duro. Suponiendo que cada sector puede almacenar 512 bytes, escribe la capacidad del disco en Kilobytes, Megabytes y Gigabytes.
1 Kb = 1024 bytes
1 Mb = 1024 Kb
1 Gb = 1024 Mb


Ok ya tengo toda la estructura pero algo me esta partiendo la cabeza ya que fui a ver las especificaciones de un disco duro y venian los sectores y los cilindros no venian las pistas por lo que investigue pero vi que se supone las pistas totales de una cara * 2 es = a un cilindro osea la cara inferior y superior estoy bien????

osea cambiaria mi ecuacion a pistas * 2 *cil???? 

jaja estoy peleado con estoy del disco duro




Pon el código fuente y lo veremos mejor
#2209
Es libre que hasta linux lo tiene y los que faltan por tener.
#2210
Scripting / Re: Power Shell
5 Agosto 2007, 11:40 AM
Detener todas las demás sesiones de Windows PowerShell
En algunas ocasiones, puede resultar útil poder detener todas las sesiones de Windows PowerShell que se estén ejecutando, menos la sesión actual. Si una sesión está utilizando demasiados recursos o no es posible tener acceso a ella (puede estar ejecutándose de forma remota o en otra sesión del escritorio), es posible que no pueda detenerla directamente. No obstante, si intenta detener todas las sesiones que se están ejecutando, es posible que lo que termine sea la sesión actual.
Cada sesión de Windows PowerShell tiene un PID de variable de entorno que contiene el Id. del proceso de Windows PowerShell. Puede comparar el $PID con el Id. de cada sesión y terminar únicamente las sesiones de Windows PowerShell que tengan un Id. distinto. El siguiente comando de canalización realiza esta tarea y devuelve una lista de las sesiones terminadas (debido a que se usa el parámetro PassThru):
PS> Get-Process -Name powershell | Where-Object -FilterScript {$_.Id -ne $PID} | Stop-Process -
PassThru
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    334       9    23348      29136   143     1.03    388 powershell
    304       9    23152      29040   143     1.03    632 powershell
    302       9    20916      26804   143     1.03   1116 powershell
    335       9    25656      31412   143     1.09   3452 powershell
    303       9    23156      29044   143     1.05   3608 powershell
    287       9    21044      26928   143     1.02   3672 powershell

Administrar servicios locales
Hay ocho cmdlets Service principales, diseñados para una amplia variedad de tareas relacionadas con servicios. Explicaremos únicamente cómo se enumeran y cambian los estados de ejecución de servicios, pero puede obtener una lista de los cmdlets Service con Get-Help *-Service y también puede obtener información acerca de cada cmdlet Service con Get-Help<nombreCmdlet> (p. ej., Get-Help New-Service).
Mostrar la lista de servicios
Puede mostrar los servicios locales de un equipo con Get-Service. Al igual que con Get-Process, el uso del comando Get-Service sin parámetros devuelve todos los servicios. Puede filtrarlos por nombre e incluso utilizar un asterisco como carácter comodín:
PS> Get-Service -Name se*
Status   Name               DisplayName
------   ----               -----------
Running  seclogon           Secondary Logon
Running  SENS               System Event Notification
Stopped  ServiceLayer       ServiceLayer

Dado que no siempre es evidente cuál es el nombre real del servicio, puede encontrarse con que necesita buscar los servicios por el nombre para mostrar. Puede hacerlo por un nombre específico, con caracteres comodín o utilizando una lista de nombres para mostrar:
PS> Get-Service -DisplayName se*
Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Running  SamSs              Security Accounts Manager
Running  seclogon           Secondary Logon
Stopped  ServiceLayer       ServiceLayer
Running  wscsvc             Security Center
PS> Get-Service -DisplayName ServiceLayer,Server
Status   Name               DisplayName
------   ----               -----------
Running  lanmanserver       Server
Stopped  ServiceLayer       ServiceLayer

Detener, iniciar, suspender y reiniciar servicios
Los cmdlets Service tienen todos el mismo formato general. Puede especificar los servicios por el nombre común o el nombre para mostrar, así como usar listas y caracteres comodín como valores. Para detener la cola de impresión, utilice:
Stop-Service -Name spooler

Para iniciar la cola de impresión después de haberla detenido, utilice:
Start-Service -Name spooler

Para suspender la cola de impresión, utilice:
Suspend-Service -Name spooler

El cmdlet Restart-Service funciona de la misma manera que los otros cmdlets Service, pero mostraremos algunos ejemplos más complejos de este cmdlet. Con el uso más sencillo, puede especificar el nombre del servicio:
PS> Restart-Service -Name spooler
ADVERTENCIA: Esperando a que termine de iniciarse el servicio 'Print Spooler (Spooler)'...
ADVERTENCIA: Esperando a que termine de iniciarse el servicio 'Print Spooler (Spooler)'...
PS>

Observará que aparece varias veces un mensaje de advertencia relativo al inicio de la cola de impresión. Si realiza una operación de servicio que tarda cierto tiempo en completarse, Windows PowerShell le informará de que todavía está intentando realizar la tarea.
Si desea reiniciar varios servicios, puede obtener una lista de los servicios, filtrarlos y, a continuación, efectuar el reinicio:
PS> Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service
ADVERTENCIA: Esperando a que termine de detenerse el servicio 'Computer Browser (Browser)'...
ADVERTENCIA: Esperando a que termine de detenerse el servicio 'Computer Browser (Browser)'...
Restart-Service : No se puede detener el servicio 'Logical Disk Manager (dmserver)' porque
tiene servicios dependientes. Sólo se puede detener si está establecida la marca Force.
En línea:1 carácter:57
+ Get-Service | Where-Object -FilterScript {$_.CanStop} | Restart-Service <<<<
ADVERTENCIA: Esperando a que termine de iniciarse el servicio 'Print Spooler (Spooler)'...
ADVERTENCIA: Esperando a que termine de iniciarse el servicio 'Print Spooler (Spooler)'...

Recopilar información acerca de equipos
Get-WmiObject es el cmdlet más importante para tareas generales de administración de sistemas. Toda la configuración fundamental de los subsistemas se expone mediante WMI. Además, WMI trata los datos como objetos incluidos en conjuntos de uno o más elementos. Dado que Windows PowerShell también trabaja con objetos y cuenta con una canalización que permite tratar uno o varios objetos de la misma manera, el acceso general a WMI permite realizar algunas tareas avanzadas con muy poco esfuerzo.
En los siguientes ejemplos se muestra cómo recopilar información específica con
Get-WmiObject respecto a un equipo arbitrario. El valor especificado del parámetro ComputerName es un punto (.), que representa al equipo local. Puede especificar un nombre o una dirección IP correspondiente a cualquier equipo al que pueda tener acceso mediante WMI. Para recuperar información acerca del equipo local, puede omitir -ComputerName.
Mostrar la lista de configuraciones de escritorio
Empezamos con un comando que recopila información acerca de los escritorios del equipo local. 
Get-WmiObject -Class Win32_Desktop -ComputerName .

Este comando devuelve información de todos los escritorios, estén o no en uso.
Nota:
La información que devuelven algunas clases de WMI puede ser muy detallada e incluye a menudo metadatos acerca de dicha clase. Dado que la mayoría de estas propiedades de metadatos tienen nombres que comienzan por dos caracteres de subrayado, puede filtrar las propiedades con Select-Object. Puede especificar únicamente las propiedades que comiencen por caracteres alfabéticos si utiliza [a-z]* como el valor de Property. Por ejemplo:
Get-WmiObject -Class Win32_Desktop -ComputerName . | Select-Object -Property [a-z]*

Para filtrar los metadatos, utilice un operador de canalización (|) para enviar los resultados del comando Get-WmiObject a Select-Object -Property [a-z]*.
Mostrar información del BIOS
La clase Win32_BIOS de WMI devuelve información bastante compacta y completa acerca del BIOS del sistema en el equipo local:
Get-WmiObject -Class Win32_BIOS -ComputerName .

Mostrar información de procesadores
Puede recuperar información general de procesadores con la clase Win32_Processor de WMI, aunque es probable que desee filtrar la información:
Get-WmiObject -Class Win32_Processor -ComputerName . | Select-Object -Property [a-z]*

Para obtener una cadena de descripción general de la familia de procesadores, basta con que se devuelva la propiedad Win32_ComputerSystemSystemType:
PS> Get-WmiObject -Class Win32_ComputerSystem -ComputerName . | Select-Object -Property SystemType
SystemType
----------
X86-based PC

Mostrar el fabricante y el modelo del equipo
La información del modelo del equipo también está disponible en Win32_ComputerSystem. No es necesario filtrar el resultado estándar mostrado para proporcionar los datos de OEM:
PS> Get-WmiObject -Class Win32_ComputerSystem
Domain              : WORKGROUP
Manufacturer        : Compaq Presario 06
Model               : DA243A-ABA 6415cl NA910
Name                : MyPC
PrimaryOwnerName    : Jane Doe
TotalPhysicalMemory : 804765696

El resultado de comandos como éste, que devuelven información directamente de algunos componentes de hardware, será tan válido como los datos de los que usted disponga. Algunos fabricantes de hardware pueden no haber configurado correctamente algún tipo de información y, por tanto, es posible que esta información no esté disponible.
Mostrar las revisiones instaladas
Puede mostrar todas las revisiones instaladas con Win32_QuickFixEngineering:
Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName .

Esta clase devuelve una lista de revisiones similar a la siguiente:
Description         : Update for Windows XP (KB910437)
FixComments         : Update
HotFixID            : KB910437
Install Date        :
InstalledBy         : Administrator
InstalledOn         : 12/16/2005
Name                :
ServicePackInEffect : SP3
Status              :

Para que el resultado sea más conciso, quizá desee excluir algunas propiedades. Aunque puede utilizar el parámetro Get-WmiObject Property para seleccionar sólo el HotFixID, en realidad esta acción devuelve más información, ya que todos los metadatos se muestran de manera predeterminada:
PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property HotFixId
HotFixID         : KB910437
__GENUS          : 2
__CLASS          : Win32_QuickFixEngineering
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :

Se devuelven los datos adicionales porque el parámetro Property de Get-WmiObject limita las propiedades devueltas de instancias de clases de WMI, no el objeto devuelto a Windows PowerShell. Para reducir el resultado, utilice Select-Object:
PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property Hot
FixId | Select-Object -Property HotFixId
HotFixId
--------
KB910437

Mostrar información de versión del sistema operativo
Las propiedades de la clase Win32_OperatingSystem incluyen información sobre la versión del sistema operativo y los Service Pack instalados. Puede seleccionar explícitamente estas propiedades únicamente para obtener un resumen de la información de versión de Win32_OperatingSystem: 
Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property BuildNumber,BuildType,OSType,ServicePackMajorVersion,ServicePackMinorVersion

También puede utilizar caracteres comodín con el parámetro Select-Object Property. Como todas las propiedades que comienzan por Build o ServicePack son importantes en este caso, hemos reducido el resultado de la siguiente manera:
PS> Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property Build*,OSType,ServicePack*

BuildNumber             : 2600
BuildType               : Uniprocessor Free
OSType                  : 18
ServicePackMajorVersion : 2
ServicePackMinorVersion : 0

Mostrar los usuarios y propietarios locales
La información general sobre los usuarios locales (número de usuarios con licencia, número actual de usuarios y nombre del propietario) está disponible mediante una selección de propiedades de Win32_OperatingSystem. Puede seleccionar explícitamente las propiedades para que se muestre lo siguiente:
Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property NumberOfLicensedUsers,NumberOfUsers,RegisteredUser

Una versión más concisa con caracteres comodín es la siguiente: 
Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property *user*

Obtener el espacio en disco disponible
Para ver el espacio en disco y el espacio disponible para unidades locales, puede utilizar la clase Win32_LogicalDisk de WMI. Necesita ver únicamente las instancias con el valor 3 para DriveType, que es el valor que WMI usa para los discos duros fijos.
Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName .

DeviceID     : C:
DriveType    : 3
ProviderName :
FreeSpace    : 65541357568
Size         : 203912880128
VolumeName   : Local Disk

DeviceID     : Q:
DriveType    : 3
ProviderName :
FreeSpace    : 44298250240
Size         : 122934034432
VolumeName   : New Volume

PS> Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum

Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum | Select-Object -Property Property,Sum

Obtener información de sesiones iniciadas
Puede obtener información general acerca de sesiones iniciadas que estén asociadas a usuarios mediante la clase Win32_LogonSession de WMI: 
Get-WmiObject -Class Win32_LogonSession -ComputerName .

Obtener el usuario que ha iniciado una sesión en un equipo
Puede mostrar el usuario que ha iniciado una sesión en un determinado equipo con Win32_ComputerSystem. Este comando devuelve únicamente el usuario que ha iniciado una sesión en el escritorio del sistema:
Get-WmiObject -Class Win32_ComputerSystem -Property UserName -ComputerName .

Obtener la hora local de un equipo
Puede recuperar la hora local actual que se muestra en un equipo específico con la clase Win32_LocalTime de WMI. Como esta clase muestra todos los metadatos de manera predeterminada, es posible que desee filtrarlos con Select-Object:
PS> Get-WmiObject -Class Win32_LocalTime -ComputerName . | Select-Object -Property [a-z]*


Day          : 15
DayOfWeek    : 4
Hour         : 12
Milliseconds :
Minute       : 11
Month        : 6
Quarter      : 2
Second       : 52
WeekInMonth  : 3
Year         : 2006

Mostrar el estado de un servicio
Para ver el estado de todos los servicios en un equipo específico, puede utilizar localmente el cmdlet Get-Service como se ha mencionado anteriormente. Para sistemas remotos, puede usar la clase Win32_Service de WMI. Si usa también Select-Object para filtrar los resultados a Status, Name y DisplayName, el formato de los resultados será prácticamente igual que el de Get-Service:
Get-WmiObject -Class Win32_Service -ComputerName . | Select-Object -Property Status,Name,DisplayName

Para que se muestren completos los nombres de servicio que sean muy largos, quizá desee usar Format-Table con los parámetros AutoSize y Wrap, lo que optimiza el ancho de columna y permite ajustar los nombres largos en lugar de truncarlos:
Get-WmiObject -Class Win32_Service -ComputerName . | Format-Table -Property Status,Name,DisplayName -AutoSize -Wrap

Trabajar con instalaciones de software
Se puede tener acceso a aplicaciones diseñadas correctamente para utilizar Windows Installer mediante la clase Win32_Product de WMI, pero actualmente no todas las aplicaciones usan Windows Installer. Dado que Windows Installer proporciona la mayor variedad de técnicas estándar para trabajar con aplicaciones que se pueden instalar, nos centraremos principalmente en este tipo de aplicaciones. Las aplicaciones que utilizan otras rutinas de instalación no se suelen administrar con Windows Installer. Las técnicas concretas para trabajar con estas aplicaciones dependen del software de instalación y de las decisiones que adopte el programador de la aplicación.
Nota:
Las aplicaciones que se instalan con el procedimiento de copiar los archivos de la aplicación en el equipo no se pueden administrar normalmente con las técnicas descritas aquí. Estas aplicaciones se pueden administrar como si fueran archivos y carpetas utilizando las técnicas descritas en la sección "Trabajar con archivos y carpetas".
Mostrar las aplicaciones instaladas con Windows Installer
Las aplicaciones instaladas con Windows Installer en un sistema local o remoto se pueden enumerar fácilmente mediante una simple consulta de WMI:
PS> Get-WmiObject -Class Win32_Product -ComputerName .
IdentifyingNumber : {7131646D-CD3C-40F4-97B9-CD9E4E6262EF}
Name              : Microsoft .NET Framework 2.0
Vendor            : Microsoft Corporation
Version           : 2.0.50727
Caption           : Microsoft .NET Framework 2.0

Quizá desee usar Select-Object, ya que puede resultar útil otro tipo de información que no se muestra de manera predeterminada. Si desea buscar la ubicación de la caché de paquetes de Microsoft .NET Framework 2.0, puede utilizar lo siguiente:
PS> Get-WmiObject -Class Win32_Product -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Microsoft .NET Framework 2.0"} | Select-Object -Property [a-z]*
Name              : Microsoft .NET Framework 2.0
Version           : 2.0.50727
InstallState      : 5
Caption           : Microsoft .NET Framework 2.0
Description       : Microsoft .NET Framework 2.0
IdentifyingNumber : {7131646D-CD3C-40F4-97B9-CD9E4E6262EF}
InstallDate       : 20060506
InstallDate2      : 20060506000000.000000-000
InstallLocation   :
PackageCache      : C:\WINDOWS\Installer\619ab2.msi
SKUNumber         :
Vendor            : Microsoft Corporation

Como alternativa, puede usar el parámetro Get-WmiObject Filter para seleccionar sólo Microsoft .NET Framework 2.0. Este comando aplica un filtro de WMI, por lo que no se usa la sintaxis de filtrado de Windows PowerShell. En su lugar, se usa el lenguaje de consultas de WMI (WQL):
Get-WmiObject -Class Win32_Product -ComputerName . -Filter "Name='Microsoft .NET Framework 2.0'"| Select-Object -Property [a-z]*

Nota:
Las consultas de WQL suelen contener caracteres, como espacios o el signo igual, que tienen un significado especial en Windows PowerShell. Por este motivo, es aconsejable especificar siempre el valor del parámetro Filter entre comillas. También se puede usar el carácter de escape de Windows PowerShell, un acento grave (`), aunque no mejore la legibilidad. El siguiente comando equivale al comando anterior y devuelve los mismos resultados, pero utiliza el acento grave para omitir caracteres especiales, en lugar de especificar entre comillas la cadena de filtro completa:
Get-WmiObject -Class Win32_Product -ComputerName . -Filter Name`=`'Microsoft` .NET` Framework` 2.0`' | Select-Object -Property [a-z]*

Otra manera de generar una lista reducida es seleccionar explícitamente el formato de presentación. El siguiente resultado contiene algunas de las propiedades más útiles para identificar determinados paquetes instalados:
Get-WmiObject -Class Win32_Product -ComputerName . | Format-List Name,InstallDate,InstallLocation,PackageCache,Vendor,Version,IdentifyingNumber
...
Name              : HighMAT Extension to Microsoft Windows XP CD Writing Wizard
InstallDate       : 20051022
InstallLocation   : C:\Archivos de programa\HighMAT CD Writing Wizard\
PackageCache      : C:\WINDOWS\Installer\113b54.msi
Vendor            : Microsoft Corporation
Version           : 1.1.1905.1
IdentifyingNumber : {FCE65C4E-B0E8-4FBD-AD16-EDCBE6CD591F}
...

Por último, para buscar únicamente los nombres de las aplicaciones instaladas, una sencilla instrucción Format-Wide reducirá el resultado:
Get-WmiObject -Class Win32_Product -ComputerName .  | Format-Wide -Column 1

Aunque ahora disponemos de varias maneras de examinar las aplicaciones instaladas con Windows Installer, no hemos considerado otras aplicaciones. Puesto que la mayoría de las aplicaciones estándar registran su programa de desinstalación en Windows, podemos trabajar con estos programas localmente buscándolos en el Registro de Windows.
Mostrar todas las aplicaciones que se pueden desinstalar
Aunque no hay manera de garantizar que se pueda encontrar cada aplicación del sistema, se pueden buscar todos los programas que aparecen en el cuadro de diálogo Agregar o quitar programas. Agregar o quitar programas busca estas aplicaciones en las listas que mantiene en la clave del Registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall, pero también podemos examinar manualmente esta clave para buscar aplicaciones. Para poder ver más fácilmente la clave Uninstall, podemos asignar una unidad de Windows PowerShell a esta ubicación del Registro:
PS> New-PSDrive -Name Uninstall -PSProvider Registry -Root HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Name       Provider      Root                                   CurrentLocation
----       --------      ----                                   ---------------
Uninstall  Registry      HKEY_LOCAL_MACHINE\SOFTWARE\Micr...

Nota:
La unidad HKLM: está asignada a la raíz de HKEY_LOCAL_MACHINE, motivo por el que hemos utilizado esta unidad en la ruta de acceso a la clave Uninstall. En lugar de HKLM:, podríamos haber especificado la ruta de acceso al Registro con HKLM o HKEY_LOCAL_MACHINE. La ventaja de usar una unidad del Registro existente es que podemos utilizar el procedimiento para completar con el tabulador para completar los nombres de las claves, de manera que no es necesario escribirlas.

Ahora tenemos una unidad llamada "Uninstall" que podemos usar para buscar aplicaciones instaladas con comodidad y rapidez. Para saber el número de aplicaciones instaladas, puede contar el número de claves del Registro que aparecen en la unidad Uninstall: de Windows PowerShell:
PS> (Get-ChildItem -Path Uninstall:).Length
459

Podemos realizar búsquedas más refinadas en esta lista de aplicaciones mediante diversas técnicas, empezando por Get-ChildItem. Para obtener una lista de las aplicaciones en la variable $UninstallableApplications, podemos realizar lo siguiente:
$UninstallableApplications = Get-ChildItem -Path Uninstall:

Nota:
Usamos un nombre de variable largo por mayor claridad. En la realidad, no hay ningún motivo para usar nombres largos. Aunque puede usar el procedimiento para completar con el tabulador para los nombres de variables, también puede usar nombres de 1 ó 2 caracteres para ir más rápido. Los nombres descriptivos largos son muy útiles cuando se programa código que se va a volver a utilizar más adelante.

Podemos buscar los nombres para mostrar de las aplicaciones en la clave Uninstall con el siguiente comando:
PS> Get-ChildItem -Path Uninstall: | ForEach-Object -Process { $_.GetValue("DisplayName") }

No hay ninguna garantía de que estos valores sean únicos. En el siguiente ejemplo, dos elementos instalados aparecen como "Windows Media Encoder 9 Series":
PS> Get-ChildItem -Path Uninstall: | Where-Object -FilterScript { $_.GetValue("DisplayName") -eq "Windows Media Encoder 9 Series"}


   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros
oft\Windows\CurrentVersion\Uninstall

SKC  VC Name                           Property
---  -- ----                           --------
  0   3 Windows Media Encoder 9        {DisplayName, DisplayIcon, UninstallS...
  0  24 {E38C00D0-A68B-4318-A8A6-F7... {AuthorizedCDFPrefix, Comments, Conta...

Instalar aplicaciones
La clase Win32_Product permite instalar paquetes de Windows Installer, ya sea de forma remota o local. En lo que respecta a las instalaciones remotas, se debe especificar la ruta de acceso al paquete .msi para la instalación como una ruta de red UNC (Convención de nomenclatura universal) típica, ya que el subsistema WMI no reconoce las rutas de Windows PowerShell. Por ejemplo, para instalar el paquete de MSI NewPackage.msi ubicado en el recurso compartido de red \\AppServ\dsp, en el equipo remoto PC01, deberá escribir lo siguiente en el símbolo del sistema de Windows PowerShell:
(Get-WMIObject -ComputerName PC01 -List | Where-Object -FilterScript {$_.Name -eq "Win32_Product"}).InvokeMethod("Install","\\AppSrv\dsp\NewPackage.msi")

Las aplicaciones que no utilizan la tecnología Windows Installer pueden disponer de métodos específicos para la implementación automatizada. Para averiguar si hay un método para la implementación automatizada, probablemente necesite consultar la documentación de la aplicación o ponerse en contacto con el servicio de soporte técnico del proveedor de la aplicación. En algunos casos, aunque el proveedor no haya diseñado específicamente la aplicación para la instalación automatizada, es posible que el fabricante del software de instalación disponga de técnicas para la automatización.
Eliminar aplicaciones
El procedimiento para quitar un paquete de Windows Installer con Windows PowerShell es prácticamente el mismo que se utiliza para instalar un paquete con InvokeMethod. En el siguiente ejemplo, se selecciona el paquete que se va a desinstalar según su propiedad Name; en algunos casos, puede resultar más fácil filtrar con IdentifyingNumber:
(Get-WmiObject -Class Win32_Product -Filter "Name='ILMerge'" -ComputerName . ).InvokeMethod("Uninstall",$null)

Quitar otras aplicaciones no es sencillo, ni siquiera localmente. Podemos encontrar las cadenas de desinstalación de la línea de comandos correspondientes a estas aplicaciones mediante la extracción de la propiedad UninstallString. Este método se puede usar para aplicaciones instaladas con Windows Installer y para programas antiguos mostrados en la clave Uninstall:
Get-ChildItem -Path Uninstall: | ForEach-Object -Process { $_.GetValue("UninstallString") }

Si lo desea, puede filtrar el resultado por el nombre para mostrar:
Get-ChildItem -Path Uninstall: | Where-Object -FilterScript { $_.GetValue("DisplayName") -like "Win*"} | ForEach-Object -Process { $_.GetValue("UninstallString") }

No obstante, es posible que estas cadenas no se puedan utilizar directamente desde el símbolo del sistema de Windows PowerShell sin alguna modificación.
Actualizar aplicaciones instaladas con Windows Installer
Para actualizar una aplicación se utilizan dos tipos de información: necesita saber el nombre de la aplicación instalada que se va a actualizar, así como la ruta de acceso al paquete de actualización de la aplicación. Con esta información, se puede realizar una actualización desde Windows PowerShell con una única línea de comandos:
(Get-WmiObject -Class Win32_Product -ComputerName . -Filter "Name='OldAppName'").InvokeMethod("Upgrade","\\AppSrv\dsp\OldAppUpgrade.msi")

Cambiar el estado del equipo: bloquear, cerrar la sesión, apagar y reiniciar
Puede restablecer un equipo de varias maneras distintas desde Windows PowerShell pero en la primera versión debe usar una herramienta estándar de línea de comandos o WMI. Aunque está utilizando Windows PowerShell sólo para invocar una determinada herramienta, recorrer el proceso para cambiar el estado de energía de un equipo ilustra algunas partes importantes del uso de herramientas externas.
Bloquear un equipo
La única manera de bloquear directamente un equipo con las herramientas estándar disponibles es llamar directamente a la función LockWorkstation() en user32.dll:
rundll32.exe user32.dll,LockWorkStation

Este comando bloquea de forma inmediata la estación de trabajo. En sistemas operativos como Windows XP, con Cambio rápido de usuario activado, el equipo volverá a la pantalla de inicio de sesión del usuario en lugar de iniciar el protector de pantalla del usuario actual. En un servidor Terminal Server, donde quizá desee desconectar sesiones específicas, también puede utilizar la herramienta tsshutdn.exe de la línea de comandos.
Cerrar la sesión actual
Puede cerrar una sesión de varias maneras distintas en el sistema local. La manera más sencilla es usar la herramienta de línea de comandos logoff.exe de Escritorio remoto/Servicios de Terminal Server (escriba logoff /? en el símbolo del sistema de Windows PowerShell o del shell de comandos para ver la información de uso). Para cerrar la sesión activa actualmente, escriba logoff sin argumentos.
Otra opción es utilizar la herramienta shutdown.exe con la opción de cierre de sesión correspondiente:
shutdown.exe -l

Una tercera opción es usar WMI. La clase Win32_OperatingSystem incluye el método Win32Shutdown; si se invoca este método con el argumento 0, se iniciará el cierre de la sesión:
(Get-WmiObject -Class Win32_OperatingSystem -ComputerName .).InvokeMethod("Win32Shutdown",0)

Apagar o reiniciar un equipo
Apagar y reiniciar equipos son generalmente tareas del mismo tipo. Las herramientas utilizadas para apagar equipos suelen reiniciarlos también, y viceversa. Hay dos opciones sencillas para reiniciar un equipo desde Windows PowerShell: tsshutdn.exe o shutdown.exe, con los argumentos adecuados. Puede obtener información de uso detallada con tsshutdn.exe /? o shutdown.exe /?.
Asimismo, es posible apagar y reiniciar un equipo utilizando Win32_OperatingSystem directamente desde Windows PowerShell. No obstante, la información detallada de este tipo de implementación queda fuera del ámbito de esta Guía básica de Windows PowerShell.
Trabajar con impresoras
Las tareas de administración de impresoras pueden realizarse en Windows PowerShell con WMI y con el objeto COM WScript.Network de WSH. Utilizaremos una combinación de ambas herramientas para demostrar la forma de realizar tareas específicas.
Crear una lista de conexiones de impresora
La manera más sencilla de crear una lista de las impresoras instaladas en un equipo es usar la clase Win32_Printer de WMI:
Get-WmiObject -Class Win32_Printer -ComputerName .

También puede crear una lista de las impresoras con el objeto COM WScript.Network utilizado habitualmente en scripts de WSH:
(New-Object -ComObject WScript.Network).EnumPrinterConnections()

Este comando devuelve un simple conjunto de cadenas de los nombres de puertos y los nombres de dispositivos de impresora sin etiquetas distintivas, lo que no resulta útil para facilitar la inspección.
Agregar una impresora de red
La manera más fácil de agregar una impresora de red es utilizar WScript.Network:
(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("\\Printserver01\Xerox5")

Configurar una impresora predeterminada
Para establecer la impresora predeterminada con WMI, debe filtrar la colección Win32_Printer hasta obtener la impresora deseada y, a continuación, invocar el método SetDefaultPrinter:
(Get-WmiObject -ComputerName . -Class Win32_Printer -Filter "Name='HP LaserJet 5Si'").InvokeMethod("SetDefaultPrinter",$null)

WScript.Network es un poco más fácil de utilizar; incluye también el método SetDefaultPrinter y sólo es necesario especificar el nombre de la impresora como argumento:
(New-Object -ComObject WScript.Network).SetDefaultPrinter('HP LaserJet 5Si')

Quitar una conexión de impresora
Puede quitar una conexión de impresora con el método WScript.Network RemovePrinterConnection:
(New-Object -ComObject WScript.Network).RemovePrinterConnection("\\Printserver01\Xerox5")

Realizar tareas de red
La mayoría de las tareas básicas de administración de protocolos de red implican el uso de TCP/IP, ya que éste es el protocolo de red más utilizado. Veremos ahora cómo efectuar una selección de estas tareas desde Windows PowerShell con WMI.
Crear una lista de direcciones IP utilizadas en un equipo
Puede devolver todas las direcciones IP que se estén utilizando en un equipo con el siguiente comando:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property IPAddress

El resultado de este comando es diferente de la mayoría de las listas de propiedades, ya que los valores se especifican entre llaves:
IPAddress
---------
{192.168.1.80}
{192.168.148.1}
{192.168.171.1}
{0.0.0.0}
Para entender por qué se especifican entre llaves, examine detenidamente la propiedad IPAddress con Get-Member:
PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Get-Member -Name IPAddress


   TypeName: System.Management.ManagementObject#root\cimv2\Win32_NetworkAdapter
Configuration

Name      MemberType Definition
----      ---------- ----------
IPAddress Property   System.String[] IPAddress {get;}
La propiedad IPAddress de cada adaptador de red es en realidad una matriz. Las llaves de la definición indican que IPAddress no es un valor de System.String, sino una matriz de valores de System.String.
Puede expandir estos valores con el parámetro Select-Object ExpandProperty:
PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -ExpandProperty IPAddress
192.168.1.80
192.168.148.1
192.168.171.1
0.0.0.0

Mostrar los datos de configuración de IP
Para mostrar los datos de configuración de IP correspondientes a cada adaptador de red, puede utilizar el siguiente comando:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .

Nota:
De manera predeterminada, se muestra un conjunto muy reducido de la información de configuración disponible de los adaptadores de red. Para una inspección más exhaustiva y para la solución de problemas, Select-Object permite forzar la presentación de más propiedades. Si no está interesado en las propiedades de IPX o WINS (lo que probablemente sea el caso en una red TCP/IP moderna), también puede excluir todas las propiedades que comiencen por WINS o IPX:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*
Este comando devolverá información detallada acerca de DHCP, DNS, el enrutamiento y otras propiedades de configuración de IP menos importantes.

Hacer ping en equipos
Puede hacer un sencillo ping a un equipo con Win32_PingStatus. El siguiente comando hará el ping, pero devuelve un resultado largo:
Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .

Un formato más útil para la información de resumen es mostrar sólo las propiedades Address, ResponseTime y StatusCode:
PS> Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName . | Select-Object -Property Address,ResponseTime,StatusCode

Address                                  ResponseTime                StatusCode
-------                                  ------------                ----------
127.0.0.1                                           0                         0

El código de estado 0 indica que el ping ha sido correcto.
Puede hacer ping a toda una serie de equipos utilizando una matriz. Como se utilizan varias direcciones, hay que usar ForEach-Object para hacer ping a cada dirección por separado:
"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='" + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

Se puede utilizar el mismo proceso para hacer ping a toda una subred. Por ejemplo, si desea comprobar una red privada con el número de red 192.168.1.0 y usa una máscara de subred estándar de clase C (255.255.255.0), únicamente las direcciones entre 192.168.1.1 y 192.168.1.254 serán direcciones locales válidas (0 se reserva siempre para el número de red y 255 es una dirección de emisión de subred).
Puede obtener una matriz de los números del 1 al 254 en Windows PowerShell con la instrucción 1..254; por tanto, se puede hacer un ping de subred completo si se genera la matriz y se agregan los valores a una dirección parcial en la instrucción ping:
1..254| ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1." + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

Nota:
Esta técnica para generar un intervalo de direcciones se puede usar también en otras partes. Puede generar un conjunto completo de direcciones de esta manera:
$ips = 1..254 | ForEach-Object -Process {"192.168.1." + $_}

Recuperar propiedades de adaptadores de red
En una sección anterior de esta Guía básica, hemos mencionado que podía recuperar propiedades de configuración generales con Win32_NetworkAdapterConfiguration. Aunque no se trata estrictamente de información de TCP/IP, la información relativa a los adaptadores de red, como las direcciones MAC y los tipos de adaptadores, puede resultar útil para entender lo que está pasando en un equipo. Puede obtener un resumen de esta información con este comando:
Get-WmiObject -Class Win32_NetworkAdapter -ComputerName .

Asignar el dominio DNS para un adaptador de red
La asignación del dominio DNS para utilizarlo en la resolución automática de nombres se puede automatizar con el método Win32_NetworkAdapterConfiguration SetDNSDomain. Dado que se asigna el dominio DNS por separado para la configuración de cada adaptador de red, es necesario usar una instrucción ForEach-Object para asegurarse de que se seleccionan los adaptadores de forma individual:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process { $_.InvokeMethod("SetDNSDomain", "fabrikam.com")}

Hemos utilizado aquí la instrucción de filtrado IPEnabled=true porque, incluso en una red que usa sólo TCP/IP, varias de las configuraciones de adaptadores de red que hay en un equipo no son adaptadores TCP/IP reales; se trata de elementos de software generales que admiten RAS, PPTP, QoS y otros servicios para todos los adaptadores y, por tanto, no tienen una dirección propia.
Podría filtrar el comando con Where-Object, en lugar de usar Get-WmiObject Filter:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName . | Where-Object -FilterScript {$_.IPEnabled} | ForEach-Object -Process {$_.InvokeMethod("SetDNSDomain", "fabrikam.com")}

Realizar tareas de configuración de DHCP
La modificación de la información de DHCP conlleva trabajar con un conjunto de adaptadores, como en la configuración de DNS. Se pueden realizar varias acciones distintas con WMI; recorreremos paso a paso algunas de las más comunes.
Determinar los adaptadores con DHCP habilitado
Puede usar el siguiente comando para buscar los adaptadores con DHCP habilitado en un equipo:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .

Si no está buscando adaptadores con problemas de configuración de IP, puede restringir esta búsqueda a los adaptadores con IP habilitado:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .

Recuperar propiedades de DHCP
Las propiedades relativas a DHCP de un adaptador comienzan generalmente por DHCP; por tanto, puede agregar un elemento de canalización Select-Object -Property DHCP* para ver información de DHCP de resumen de los adaptadores:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName . | Select-Object -Property DHCP*

Habilitar DHCP en cada adaptador
Si desea habilitar DHCP globalmente en todos los adaptadores, utilice el siguiente comando:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process {$_.InvokeMethod("EnableDHCP", $null)}

También podría utilizar la instrucción Filter "IPEnabled=true and DHCPEnabled=false" para no intentar habilitar DHCP donde ya esté habilitado, pero omitir este paso no producirá ningún error.
Liberar y renovar concesiones DHCP en adaptadores específicos
Win32_NetworkAdapterConfiguration incluye los métodos ReleaseDHCPLease y RenewDHCPLease, y ambos se utilizan de la misma manera. En general, estos métodos se usan si sólo es necesario liberar o renovar direcciones para un adaptador en una subred específica. La manera más sencilla de filtrar los adaptadores en una subred es seleccionar únicamente las configuraciones de adaptadores que utilicen la puerta de enlace de esa subred. Por ejemplo, el siguiente comando libera todas las concesiones DHCP en adaptadores del equipo local que obtengan estas concesiones a partir de 192.168.1.254:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.InvokeMethod("ReleaseDHCPLease",$null)}

El único cambio para renovar concesiones DHCP es invocar RenewDHCPLease en lugar de ReleaseDHCPLease:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.InvokeMethod("ReleaseDHCPLease",$null)}

Nota:
Cuando se utilizan estos métodos en un equipo remoto, se puede perder el acceso al sistema remoto si se está conectado al mismo a través del adaptador con la concesión liberada o renovada.
Liberar y renovar concesiones DHCP en todos los adaptadores
Puede liberar o renovar direcciones DHCP globalmente en todos los adaptadores con los métodos Win32_NetworkAdapterConfiguration, ReleaseDHCPLeaseAll y RenewDHCPLeaseAll. No obstante, es necesario aplicar el comando a la clase de WMI, y no a un adaptador concreto, ya que la liberación y la renovación global de concesiones se realizan en la clase, no en un adaptador concreto.
Puede obtener una referencia a una clase de WMI, y no a instancias de la clase, si crea una lista de todas las clases de WMI y, a continuación, selecciona sólo la clase que desea por su nombre. Por ejemplo, este comando devuelve la clase Win32_NetworkAdapterConfiguration:
Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}

Puede tratar el comando completo como la clase y, a continuación, invocar el método ReleaseDHCPAdapterLease incluido. En el siguiente comando, los elementos de canalización Get-WmiObject y Where-Object aparecen entre paréntesis y esto fuerza que se evalúen primero:
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ) .InvokeMethod("ReleaseDHCPLeaseAll", $null)

Puede utilizar el mismo formato de comando para invocar el método RenewDHCPLeaseAll:
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ) .InvokeMethod("RenewDHCPLeaseAll", $null)

Crear un recurso compartido de red
Puede crear un recurso compartido de red con el método Win32_Share Create:
(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).InvokeMethod("Create",("C:\temp","TempShare",0,25,"test share of the temp folder"))

También puede crear el recurso compartido con net share en Windows PowerShell:
net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"

Eliminar un recurso compartido de red
Puede quitar un recurso compartido de red con Win32_Share, pero el proceso es ligeramente distinto del que se usa para crear un recurso compartido, ya que necesita recuperar el recurso compartido específico que desea quitar, en lugar de la clase Win32_Share. La siguiente instrucción elimina el recurso compartido "TempShare":
(Get-WmiObject -Class Win32_Share -ComputerName . -Filter "Name='TempShare'").InvokeMethod("Delete",$null)

También se puede utilizar el comando net share:
PS> net share tempshare /delete
tempshare se ha eliminado.

Conectar una unidad de red accesible desde Windows
New-PSDrive permite crear una unidad de Windows PowerShell, pero las unidades creadas de esta manera están disponibles únicamente en Windows PowerShell. Para crear una unidad en red, puede usar el objeto COM WScript.Network. El siguiente comando asigna el recurso compartido \\FPS01\users a la unidad local B:
(New-Object -ComObject WScript.Network).MapNetworkDrive("B:", "\\FPS01\users")

También se puede utilizar el comando net use:
net use B: \\FPS01\users

Las unidades asignadas con WScript.Network o net use están disponibles inmediatamente en Windows PowerShell.
Trabajar con archivos y carpetas
Los procedimientos para desplazarse por las unidades de Windows PowerShell y manipular los elementos que contienen son similares a los que se utilizan para manipular archivos y carpetas en unidades de disco físicas de Windows. En esta sección explicaremos cómo realizar tareas específicas de manipulación de archivos y carpetas.
Mostrar todos los archivos y carpetas que contiene una carpeta
Puede obtener todos los elementos incluidos directamente en una carpeta con Get-ChildItem. Agregue el parámetro opcional Force para mostrar los elementos ocultos o del sistema. Por ejemplo, este comando muestra el contenido directo de la unidad C de Windows PowerShell (que es el mismo que la unidad C física de Windows):
Get-ChildItem -Force C:\

Este comando, que es muy parecido al comando DIR de Cmd.exe o ls de un shell de UNIX, muestra sólo los elementos contenidos directamente. Para que se muestren los elementos contenidos, debe especificar también el parámetro - Recurse (esta operación puede tardar mucho tiempo en completarse). Para mostrar todo el contenido de la unidad C:
Get-ChildItem -Force C:\ -Recurse

Get-ChildItem puede filtrar elementos con los parámetros Path, Filter, Include y Exclude, pero éstos se basan normalmente sólo en el nombre. Puede aplicar filtros complejos basándose en otras propiedades de los elementos con Where-Object.
El siguiente comando busca todos los archivos ejecutables en la carpeta Archivos de programa que se modificaron por última vez después del 1 de octubre de 2005 y cuyo tamaño se encuentra entre 1 megabyte y 10 megabytes:
Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe | Where-Object -FilterScript {($_.LastWriteTime -gt "2005-10-01") -and ($_.Length -ge 1m) -and ($_.Length -le 10m)}

Copiar archivos y carpetas
Las operaciones de copia se realizan con Copy-Item. El siguiente comando crea una copia de seguridad de C:\boot.ini en C:\boot.bak:
Copy-Item -Path c:\boot.ini -Destination c:\boot.bak

Si el archivo de destino ya existe, la copia no se podrá realizar. Para sobrescribir un destino que ya existe, utilice el parámetro Force:
Copy-Item -Path c:\boot.ini -Destination c:\boot.bak -Force

Este comando se puede usar incluso con un destino de sólo lectura.
La copia de carpetas se realiza de la misma manera. Este comando copia recursivamente la carpeta C:\temp\test1 en la nueva carpeta c:\temp\DeleteMe:
Copy-Item C:\temp\test1 -Recurse c:\temp\DeleteMe

También puede copiar una selección de elementos. El siguiente comando copia todos los archivos .txt incluidos en cualquier ubicación de c:\data en c:\temp\text:
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination c:\temp\text

También se pueden usar otras herramientas para realizar copias del sistema de archivos. En Windows PowerShell se pueden utilizar objetos XCOPY, ROBOCOPY y COM, como Scripting.FileSystemObject. Por ejemplo, puede usar la clase Scripting.FileSystem COM de Windows Script Host para crear una copia de seguridad de C:\boot.ini en C:\boot.bak:
(New-Object -ComObject Scripting.FileSystemObject).CopyFile("c:\boot.ini", "c:\boot.bak")

Crear archivos y carpetas
La creación de nuevos elementos se realiza de la misma manera en todos los proveedores de Windows PowerShell. Si un proveedor de Windows PowerShell incluye varios tipos de elementos (por ejemplo, el proveedor FileSystem de Windows PowerShell distingue entre directorios y archivos), deberá especificar el tipo de elemento.
Este comando crea una nueva carpeta C:\temp\New Folder:
New-Item -Path 'C:\temp\New Folder' -ItemType "directory"

Este comando crea un nuevo archivo vacío C:\temp\New Folder\file.txt:
New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType "file"

Eliminar todos los archivos y carpetas que contiene una carpeta
Puede usar Remove-Item para quitar elementos contenidos, pero se le pedirá que confirme la eliminación si el elemento contiene algo más. Por ejemplo, si intenta eliminar la carpeta C:\temp\DeleteMe que contiene otros elementos, Windows PowerShell le solicitará confirmación antes de eliminar la carpeta:
Remove-Item C:\temp\DeleteMe

Confirmar
El elemento situado en C:\temp\DeleteMe tiene elementos secundarios y no se especificó el parámetro -recurse
Si continúa, se quitarán todos los elementos secundarios junto con el elemento. ¿Está seguro de que desea continuar?
Sí 
  • Sí a todo  [N] No  [T] No a todo  Suspender  [?] Ayuda
    (el valor predeterminado es "S"):

    Si no desea que se le pregunte por cada elemento contenido, especifique el parámetro Recurse:
    Remove-Item C:\temp\DeleteMe -Recurse

    Asignar una carpeta local como una unidad accesible desde Windows
    También puede asignar una carpeta local con el comando subst. El siguiente comando crea una unidad local P: cuya raíz es el directorio local Archivos de programa:
    subst p: $env:programfiles

    Al igual que las unidades de red, las unidades asignadas en Windows PowerShell con subst se muestran inmediatamente en la sesión de Windows PowerShell.
    Leer un archivo de texto en una matriz
    Uno de los formatos más comunes de almacenamiento de datos de texto es un archivo con líneas independientes tratadas como elementos de datos distintos. El cmdlet Get-Content permite leer un archivo completo en un solo paso, como se muestra a continuación:
    PS> Get-Content -Path C:\boot.ini
    [boot loader]
    timeout=5
    default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional"
    /noexecute=AlwaysOff /fastdetect
    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional
    with Data Execution Prevention" /noexecute=optin /fastdetect

    Get-Content trata los datos leídos del archivo como una matriz, con un elemento por línea de contenido del archivo. Para confirmar esto, compruebe el valor de Length del contenido devuelto:
    PS> (Get-Content -Path C:\boot.ini).Length
    6

    Este comando es muy útil para obtener listas de información directamente en Windows PowerShell. Por ejemplo, puede almacenar una lista de nombres de equipos o direcciones IP en un archivo C:\temp\domainMembers.txt, con un nombre en cada línea del archivo. Get-Content permite recuperar el contenido del archivo y colocarlo en la variable $Computers:
    $Computers = Get-Content -Path C:\temp\DomainMembers.txt

    $Computers es ahora una matriz que contiene un nombre de equipo en cada elemento.
    Trabajar con claves del Registro
    Dado que las claves del Registro son elementos de las unidades de Windows PowerShell, trabajar con ellas es muy parecido a trabajar con archivos y carpetas. Una diferencia fundamental es que todo elemento de una unidad de Windows PowerShell basada en el Registro es un contenedor, como lo es una carpeta en una unidad del sistema de archivos. No obstante, las entradas del Registro y sus valores asociados son propiedades de los elementos, no elementos distintos.
    Mostrar todas las subclaves de una clave del Registro
    Puede mostrar todos los elementos incluidos directamente en una clave del Registro con Get-ChildItem. Agregue el parámetro opcional Force para mostrar los elementos ocultos o del sistema. Por ejemplo, este comando muestra los elementos incluidos directamente en la unidad HKCU: de Windows PowerShell, que corresponde al subárbol del Registro HKEY_CURRENT_USER:
    PS> Get-ChildItem -Path hkcu:\


       Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

    SKC  VC Name                           Property
    ---  -- ----                           --------
      2   0 AppEvents                      {}
      7  33 Console                        {ColorTable00, ColorTable01, ColorTab...
    25   1 Control Panel                  {Opened}
      0   5 Environment                    {APR_ICONV_PATH, INCLUDE, LIB, TEMP...}
      1   7 Identities                     {Last Username, Last User ...
      4   0 Keyboard Layout                {}
    ...

    Se trata de las claves de nivel superior mostradas en HKEY_CURRENT_USER en el Editor del Registro (Regedit.exe).
    También puede especificar esta ruta de acceso al Registro si especifica el nombre del proveedor del Registro seguido de "::". El nombre completo del proveedor del Registro es Microsoft.PowerShell.Core\Registry, pero se puede abreviar como Registry. Cualquiera de los siguientes comandos enumerará el contenido que hay directamente en la unidad HKCU:
    Get-ChildItem -Path Registry::HKEY_CURRENT_USER
    Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
    Get-ChildItem -Path Registry::HKCU
    Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU
    Get-ChildItem HKCU:

    Estos comandos enumeran sólo los elementos contenidos directamente, muy parecido al comando DIR de Cmd.exe o ls de un shell de UNIX. Para que se muestren los elementos contenidos, debe especificar el parámetro Recurse. Para enumerar todas las claves del Registro en la unidad HKCU, utilice el siguiente comando (esta operación puede tardar mucho tiempo en completarse):
    Get-ChildItem -Path hkcu:\ -Recurse

    Get-ChildItem permite aplicar filtros complejos con los parámetros Path, Filter, Include y Exclude, pero éstos se basan normalmente sólo en el nombre. Puede aplicar filtros complejos basándose en otras propiedades de los elementos con el cmdlet Where-Object. El siguiente comando busca todas las claves incluidas en HKCU:\Software que tengan una subclave como máximo y que tengan exactamente cuatro valores:
    Get-ChildItem -Path HKCU:\Software -Recurse | Where-Object -FilterScript {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }

    Copiar claves
    Las operaciones de copia se realizan con Copy-Item. El siguiente comando copia HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion y todas sus propiedades a HKCU:\, creando una nueva clave llamada "CurrentVersion":
    Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu:

    Si examina esta nueva clave en el Editor del Registro o con Get-ChildItem, observará que no hay copias de las subclaves en la nueva ubicación. Para copiar todo el contenido de un contenedor, debe especificar también el parámetro - Recurse. Para aplicar el comando de copia anterior de forma recursiva, utilice este comando:
    Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu: -Recurse

    También puede usar otras herramientas de las que ya dispone para realizar copias del sistema de archivos. Cualquier herramienta de modificación del Registro (entre ellas, reg.exe, regini.exe y regedit.exe) y objetos COM que admitan la modificación del Registro (como WScript.Shell y la clase StdRegProv de WMI) se pueden utilizar en Windows PowerShell.
    Crear claves
    La creación de nuevas claves en el Registro es una operación más sencilla que crear nuevos elementos en un sistema de archivos. Dado que todas las claves del Registro son contenedores, no es necesario especificar el tipo de elemento; basta con proporcionar una ruta de acceso explícita, como:
    New-Item -Path hkcu:\software\_DeleteMe

    También puede utilizar una ruta basada en un proveedor para especificar una clave:
    New-Item -Path Registry::HKCU\_DeleteMe

    Eliminar claves
    La eliminación de elementos es prácticamente igual para todos los proveedores. Los siguientes comandos quitan elementos de forma silenciosa:
    Remove-Item -Path hkcu:\Software\_DeleteMe
    Remove-Item -Path 'hkcu:\key with spaces in the name'

    Eliminar todas las claves contenidas en una clave específica
    Puede quitar elementos contenidos con Remove-Item, pero se le pedirá que confirme la eliminación si el elemento contiene algo más. Por ejemplo, si intentamos eliminar la subclave HKCU:\CurrentVersion que creamos, podremos ver lo siguiente:
    Remove-Item -Path hkcu:\CurrentVersion

    Confirmar
    El elemento situado en HKCU:\CurrentVersion\AdminDebug tiene elementos secundarios
    y no se especificó el parámetor -recurse. Si continúa, se quitarán todos los secundarios junto con elemento. ¿Está seguro de que desea continuar?
    Sí 
    • Sí a todo  [N] No  [T] No a todo  Suspender  [?] Ayuda
      (el valor predeterminado es "S"):

      Para eliminar elementos contenidos sin pedir confirmación, especifique el parámetro -Recurse:
      Remove-Item -Path HKCU:\CurrentVersion -Recurse

      Si desea quitar todos los elementos incluidos en HKCU:\CurrentVersion, pero no HKCU:\CurrentVersion, puede utilizar:
      Remove-Item -Path HKCU:\CurrentVersion\* -Recurse

      Trabajar con entradas del Registro
      Dado que las entradas del Registro son propiedades de claves y, como tales, no se pueden examinar directamente, hay que adoptar un enfoque ligeramente distinto para trabajar con ellas.
      Mostrar las entradas del Registro
      Hay muchas maneras distintas de examinar entradas del Registro. La manera más sencilla es obtener los nombres de propiedades asociados a una clave. Por ejemplo, para ver los nombres de las entradas de la clave del Registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion, utilice Get-Item. Las claves del Registro tienen una propiedad con el nombre genérico "Property", que muestra una lista de las entradas del Registro que contiene la clave. El siguiente comando selecciona la propiedad Property y expande los elementos para que se muestren en una lista:
      PS> Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property
      DevicePath
      MediaPathUnexpanded
      Pro