суббота, 22 февраля 2014 г.

PowerShell

 Найдем все команды  PowerShell и приложения Windows со словом process :

PS C:\Users\angor> Get-Command *process*

CommandType     Name                                               ModuleName       
-----------     ----                                               ----------       
Cmdlet          Debug-Process                                      Microsoft.Power...
Cmdlet          Get-Process                                        Microsoft.Power...
Cmdlet          Start-Process                                      Microsoft.Power...
Cmdlet          Stop-Process                                       Microsoft.Power...
Cmdlet          Wait-Process                                       Microsoft.Power...
Application     qprocess.exe                                                        

PS C:\Users\angor>


Далее, по интересующему нас командлету можно получить справку:

PS C:\Users\angor> Get-Help Stop-Process

детальную информацию:

PS C:\Users\angor> Get-Help Stop-Process -Detailed


или полную информацию:

PS C:\Users\angor> Get-Help Stop-Process -Full


для некоторых командлетов можно увидеть и примеры:

PS C:\Users\angor> Get-Help Stop-Process -Examples



Командлеты работают с объектами.
Например командлет Get-ChildItem выдает объекты File и Folder для всех папок и файлов в текущем каталоге.

Вывод командлета можно перенаправить в файл ( используя символ > )  или в канал на вход другого командлета
( используя символ | ).

Если нет перенаправлений, то PowerShell форматирует список объектов в текст и выводит его на экран.


Пример:

PS C:\projects> Get-ChildItem


    Directory: C:\projects


Mode                LastWriteTime     Length Name                                   
----                -------------     ------ ----                                   
d----          1/4/2014   2:03 AM            old                                    
-a---         2/14/2014   2:29 AM      11884 install_oracle                         
-a---         2/14/2014   4:46 AM      10314 install_oracle_2                       
-a---          1/4/2014   2:12 AM       1309 neuro.py                               
-a---          1/4/2014   6:02 AM       1876 neuro1.py                              


Этот командлет возвратил пять объектов ( один типа  System.IO.DirectoryInfo и четыре типа  System.IO.FileInfo )

Эти объекты обладают многочисленными методами и свойствами, но в заголовке таблицы командлет по умолчанию вывел всего пять свойств
(Mode, LastWriteTime, Length, Name)

Чтобы узнать все остальные свойства и методы  объектов данного типа, необходимо передать эти объекты на вход другого командлета Get-Member:


PS C:\projects> Get-ChildItem | Get-Member


   TypeName: System.IO.DirectoryInfo

Name                      MemberType     Definition                                 
----                      ----------     ----------                                 
Mode                      CodeProperty   System.String Mode{get=Mode;}              
Create                    Method         void Create(), void Create(System.Securit...
CreateObjRef              Method         System.Runtime.Remoting.ObjRef CreateObjR...
CreateSubdirectory        Method         System.IO.DirectoryInfo CreateSubdirector...
Delete                    Method         void Delete(), void Delete(bool recursive) 
EnumerateDirectories      Method         System.Collections.Generic.IEnumerable[Sy...
EnumerateFiles            Method         System.Collections.Generic.IEnumerable[Sy...
EnumerateFileSystemInfos  Method         System.Collections.Generic.IEnumerable[Sy...
PSParentPath              NoteProperty   System.String PSParentPath=Microsoft.Powe...
PSPath                    NoteProperty   System.String PSPath=Microsoft.PowerShell...
PSProvider                NoteProperty   System.Management.Automation.ProviderInfo...
Attributes                Property       System.IO.FileAttributes Attributes {get;...
CreationTime              Property       datetime CreationTime {get;set;}           
CreationTimeUtc           Property       datetime CreationTimeUtc {get;set;}        
Exists                    Property       bool Exists {get;}                         
BaseName                  ScriptProperty System.Object BaseName {get=$this.Name;}   
.....

   TypeName: System.IO.FileInfo

Name                      MemberType     Definition                                 
----                      ----------     ----------                                 
Mode                      CodeProperty   System.String Mode{get=Mode;}              
AppendText                Method         System.IO.StreamWriter AppendText()        
CopyTo                    Method         System.IO.FileInfo CopyTo(string destFile...
Create                    Method         System.IO.FileStream Create()              
CreateObjRef              Method         System.Runtime.Remoting.ObjRef CreateObjR...
CreateText                Method         System.IO.StreamWriter CreateText()        
Decrypt                   Method         void Decrypt()
Delete                    Method         void Delete()                            
ToString                  Method         string ToString()                          
PSChildName               NoteProperty   System.String PSChildName=g                
PSDrive                   NoteProperty   System.Management.Automation.PSDriveInfo ...
PSIsContainer             NoteProperty   System.Boolean PSIsContainer=False         
PSParentPath              NoteProperty   System.String PSParentPath=Microsoft.Powe...
PSPath                    NoteProperty   System.String PSPath=Microsoft.PowerShell...
PSProvider                NoteProperty   System.Management.Automation.ProviderInfo...
Attributes                Property       System.IO.FileAttributes Attributes {get;...
CreationTime              Property       datetime CreationTime {get;set;}           
Name                      Property       string Name {get;}                         
BaseName                  ScriptProperty System.Object BaseName {get=if ($this.Ext...
VersionInfo               ScriptProperty System.Object VersionInfo {get=[System.Di...
.....


PS C:\projects>



Так так данные типы объектов обладают методом  Delete, то его можно использовать для удаления файлов и папок из указанного каталога:


Например:

PS C:\projects> Get-ChildItem c:\temp


    Directory: C:\temp


Mode                LastWriteTime     Length Name                                   
----                -------------     ------ ----                                   
d----         2/23/2014   4:31 AM            aa                                     
d----         2/23/2014   4:31 AM            bb                                     
-a---         2/23/2014   4:31 AM          1 cc                                     
-a---         2/23/2014   4:31 AM          1 dd                                     


PS C:\projects> (Get-ChildItem c:\temp).Delete()
PS C:\projects> Get-ChildItem c:\temp

PS C:\projects>

Все объекты были удалены.


Все хорошо, но существует несколько командлетов выполняющих универсальные действия:

Remove-Item
Move-Item
Rename-Item
Copy-Item

которые могут быть использованы с файловыми объектами для удаления, перемещения, переименования и копирования.

С данными командлетами можно использовать дополнительные опции:

Remove-Item -WhatIf
реально файлы удаляться не будут, но вывод покажет какие файлы были бы удалены без этой опции.

Remove-Item -Confirm
а эта опция потребует подтвердить удаление файлов.


Пример:

PS C:\projects> Get-ChildItem c:\temp


    Directory: C:\temp


Mode                LastWriteTime     Length Name                                   
----                -------------     ------ ----                                   
d----         2/23/2014   4:21 AM            aa                                     
d----         2/23/2014   4:21 AM            bb                                     
-a---         2/23/2014   4:21 AM          1 cc                                     
-a---         2/23/2014   4:21 AM          1 dd                                     



PS C:\projects> Get-ChildItem c:\temp | Remove-Item -WhatIf
What if: Performing the operation "Remove Directory" on target "C:\temp\aa".
What if: Performing the operation "Remove Directory" on target "C:\temp\bb".
What if: Performing the operation "Remove File" on target "C:\temp\cc".
What if: Performing the operation "Remove File" on target "C:\temp\dd".

PS C:\projects>

Ничего реально не удалилось.



PS C:\projects>
PS C:\projects> Get-ChildItem c:\temp | Remove-Item -Confirm

Потребовала подтверждения


PS C:\projects> Get-ChildItem c:\temp
PS C:\projects>

Объекты удалены, после подтверждения.