在PowerShell中,我们可以轻松的与数据、对象进行交互,为了简化我们访问外部数据,PowerShell允许我们像操作驱动器、文件一样对数据、对象等进行操作。
使用这条命令,查看我们已有的Providers:复制代码 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 command | alias | get-location | 当前目录 | pwd | gl | set-location | 改变操作目录 | cd,chdir | sl | new-item | 新建文件或文件夹 | 无 | ni | rename-item | 重命名 | rn | rni | copy-item | 复制 | copy | cpi | move-item | 移动 | move | mi | remove-item | 删除 | del | ri | set-item | 设置内容 | 无 | si | clear-item | 删除内容 | 无 | cli | mkdir | 新建文件夹 | md | 无 | set-content | 设置内容 | 无 | sc | get-content | 获取内容 | type | gc |
PSDriver
可以通过PowerShell中的PSDriver来获取当前驱动器列表,基本上所有的Provider都有一个唯一的PSDriver,但是文件系统和注册表却是个例外,通过下面的命令查看:复制代码 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"命令,可以使用如下命令查看当前机器上的环境变量设置:复制代码 我们试着获取一些环境变量的值。复制代码 显示所有属性:复制代码 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
|
再试试创建新的环境变量:- 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"。复制代码 那么新创建文件呢?我们试试如下命令:复制代码 此时要求输入文件类型,即"file"、"directory",我们使用"f"、"d"即可。
或者,在新建时使用参数:复制代码 PowerShell中的Function
PowerShell中提供了一个引擎,以供我们调用各种函数来实现功能。我们先看看自带函数:复制代码 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"函数内容吧:复制代码 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
试试下列命令:复制代码 证书复制代码 PS Function:\> cd cert:
PS cert:\> ls
Location : CurrentUser
StoreNames : {SmartCardRoot, UserDS, AuthRoot, CA...}
Location : LocalMachine
StoreNames : {SmartCardRoot, AuthRoot, CA, Trust...}
|
导出看看吧~- ls -Recurse | Export-CSV "d:\Cert.csv"
复制代码 好了,这一节内容就到这里~东西比较杂,也比较琐碎,但是这些将大大加深我们对PowerShell的理解与认识,以帮助我们以后更好的学习。
也到周末了,愿各位周末快乐!感谢对本博客的关注~谢谢!
本文出自 “马睿的技术博客” 博客,请务必保留此出处http://marui.blog.51cto.com/1034148/290938 |