Board logo

标题: [转载教程] 【探索PowerShell 】【五】PowerShell基础知识 [打印本页]

作者: HAT    时间: 2013-8-30 17:40     标题: 【探索PowerShell 】【五】PowerShell基础知识

【探索PowerShell 】【一】初识http://www.bathome.net/thread-26144-1-1.html
【探索PowerShell 】【二】基本操作http://www.bathome.net/thread-26148-1-1.html
【探索PowerShell 】【三】PowerShell下使用Aliaseshttp://www.bathome.net/thread-26149-1-1.html
【探索PowerShell 】【四】PowerShell的对象、格式与参数http://www.bathome.net/thread-26159-1-1.html
【探索PowerShell 】【五】PowerShell基础知识http://www.bathome.net/thread-26162-1-1.html
【探索PowerShell 】【六】脚本基础简要http://www.bathome.net/thread-26163-1-1.html
【探索PowerShell 】【七】变量http://www.bathome.net/thread-26165-1-1.html
【探索PowerShell 】【八】数组、哈希表(附:复制粘贴技巧)http://www.bathome.net/thread-26166-1-1.html
【探索PowerShell 】【九】条件控制、逻辑http://www.bathome.net/thread-26167-1-1.html
【探索PowerShell 】【十】循环语句http://www.bathome.net/thread-26168-1-1.html
【探索PowerShell 】【十一】函数http://www.bathome.net/thread-26174-1-1.html
【探索PowerShell 】【十二】筛选器 - Filtershttp://www.bathome.net/thread-26187-1-1.html
【探索PowerShell 】【十三】WMI对象http://www.bathome.net/thread-26188-1-1.html
【探索PowerShell 】【十四】使用WMI对象的方法http://www.bathome.net/thread-26189-1-1.html
【探索PowerShell 】【十五】引号与转义字符http://www.bathome.net/thread-26190-1-1.html

在PowerShell中,我们可以轻松的与数据、对象进行交互,为了简化我们访问外部数据,PowerShell允许我们像操作驱动器、文件一样对数据、对象等进行操作。

使用这条命令,查看我们已有的Providers:
  1. get-psprovider
复制代码
PS D:\> get-psprovider

Name                 Capabilities                                      Drives
----                 ------------                                      ------
WSMan                Credentials                                       {WSMan}
Alias                ShouldProcess                                     {Alias}
Environment          ShouldProcess                                     {Env}
FileSystem           Filter, ShouldProcess                             {C, D, E}
Function             ShouldProcess                                     {Function}
Registry             ShouldProcess, Transactions                       {HKLM, HKCU}
Variable             ShouldProcess                                     {Variable}
Certificate          ShouldProcess                                     {cert}


实际上,每一个Provider就是一个动态链接库(.dll),在PowerShell中也可以被称之为“管理单元”,在管理单元中,有详细的代码实现我们的各种操作。PowerShell甚至允许我们自己编写Provider:http://msdn.microsoft.com/en-us/library/cc136763(VS.85).aspx

我们对数据等的操作方式有很多,例如:

cmdlet功能cmd commandalias
get-location当前目录pwdgl
set-location改变操作目录cd,chdirsl
new-item新建文件或文件夹ni
rename-item重命名rnrni
copy-item复制copycpi
move-item移动movemi
remove-item删除delri
set-item设置内容si
clear-item删除内容cli
mkdir新建文件夹md
set-content设置内容sc
get-content获取内容typegc


PSDriver

可以通过PowerShell中的PSDriver来获取当前驱动器列表,基本上所有的Provider都有一个唯一的PSDriver,但是文件系统和注册表却是个例外,通过下面的命令查看:
  1. get-psdrive
复制代码
PS D:\> get-psdrive

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
Alias                                  Alias
C                  32.40         67.60 FileSystem    C:\
cert                                   Certificate   \
D                  28.30        104.28 FileSystem    D:\
E                                      FileSystem    E:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan


注意:上图中的"Name"在显示时并没有显示冒号(:),但是我们在使用时,一定要加上的,如alias:、c:等。

环境变量

PowerShell中的环境变量类似于CMD中的"set"命令,可以使用如下命令查看当前机器上的环境变量设置:
  1. cd env:
  2. ls
复制代码
我们试着获取一些环境变量的值。
  1. ls OS
复制代码
显示所有属性:
  1. ls OS | format-list *
复制代码
PS Env:\> ls OS | format-list *


PSPath        : Microsoft.PowerShell.Core\Environment::OS
PSDrive       : Env
PSProvider    : Microsoft.PowerShell.Core\Environment
PSIsContainer : False
Name          : OS
Key           : OS
Value         : Windows_NT


再试试创建新的环境变量:
  1. new-item -path . -Name New -Value "New"
复制代码
下面,我们接着认识一下在"get-childitem"时所显示的"Mode"。

PS D:\BatHome> ls


    Directory: D:\BatHome


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         8/30/2013   5:33 PM            PowerShell
-a---         8/30/2013   3:03 PM          0 bathome.txt
-a---         8/30/2013   3:03 PM          0 bbs.txt
-ar--         8/30/2013   3:04 PM          0 net.txt


第一位:d表示文件夹 -表示目录

后四位(a、r、h、s):a存档 r只读 h隐藏 s系统 -表示该位未被设置

在默认情况下,"get-childitem"是不会显示出隐藏文件的。因此,我们需要使用参数"-force"。
  1. ls -force
复制代码
那么新创建文件呢?我们试试如下命令:
  1. new-item newfile
复制代码
此时要求输入文件类型,即"file"、"directory",我们使用"f"、"d"即可。

或者,在新建时使用参数:
  1. new-item newfile -type f
复制代码
PowerShell中的Function

PowerShell中提供了一个引擎,以供我们调用各种函数来实现功能。我们先看看自带函数:
  1. cd function:
  2. ls
复制代码
PS Function:\> ls

CommandType     Name                                                Definition
-----------     ----                                                ----------
Function        A:                                                  Set-Location A:
Function        B:                                                  Set-Location B:
Function        C:                                                  Set-Location C:
Function        cd..                                                Set-Location ..
Function        cd\                                                 Set-Location \
Function        Clear-Host                                          $space = New-Object System.Management.Automation...
...


接下来,用之前介绍过的cmdlet看看"clear-host"函数内容吧:
  1. get-content clear-host
复制代码
PS Function:\> get-content clear-host
$space = New-Object System.Management.Automation.Host.BufferCell
$space.Character = ' '
$space.ForegroundColor = $host.ui.rawui.ForegroundColor
$space.BackgroundColor = $host.ui.rawui.BackgroundColor
$rect = New-Object System.Management.Automation.Host.Rectangle
$rect.Top = $rect.Bottom = $rect.Right = $rect.Left = -1
$origin = New-Object System.Management.Automation.Host.Coordinates
$Host.UI.RawUI.CursorPosition = $origin
$Host.UI.RawUI.SetBufferContents($rect, $space)


因此,我们可以为了方便,尽可能的创建一些代码块,实现特定功能,剩下要做的就只是调用了。是不是很方便呢?在后面的教程中我会详细介绍自己编写函数来实现功能调用。

注册表

在PowerShell中我们可以像操作文件一样操作注册表。PowerShell允许我们对HKCU与HKLM进行操作。

HKCU:HKEY_CURRENT_USER
HKLM:HKEY_LOCAL_MACHINE

试试下列命令:
  1. cd hklm:
  2. cd software
  3. ls
复制代码
证书
  1. cd cert:
  2. ls
复制代码
PS Function:\> cd cert:
PS cert:\> ls


Location   : CurrentUser
StoreNames : {SmartCardRoot, UserDS, AuthRoot, CA...}

Location   : LocalMachine
StoreNames : {SmartCardRoot, AuthRoot, CA, Trust...}


导出看看吧~
  1. ls -Recurse | Export-CSV "d:\Cert.csv"
复制代码
好了,这一节内容就到这里~东西比较杂,也比较琐碎,但是这些将大大加深我们对PowerShell的理解与认识,以帮助我们以后更好的学习。

也到周末了,愿各位周末快乐!感谢对本博客的关注~谢谢!

本文出自 “马睿的技术博客” 博客,请务必保留此出处http://marui.blog.51cto.com/1034148/290938




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2