Powershell 笔记

Get-Content 将从文件读取的数据视为数组, 每行文件内容为一个数组元素

传统的Cmd管道是基于文本的, 但是Powershell是基于对象的.


为什么可以通过notpad打开记事本, 不能通过wordpad打开写字板?

因为notepad.exe位于C:Windows\system32这个目录, 而这个目录已经默认被包含在Powershell的环境变量$env:Path中.
wordpad.exe所在的%ProgramFiles%\Windows NT\Accessories目录却没有包含,
wordpad所在的目录加入到环境变量中, $env:Path=$env:Path+"%ProgramFiles%\Windows NT\Accessories".


常用的对管道结果进一步处理的命令有:

命令 解释
Compare-Object 比较两组对象.
ConvertTo-Html 将 Microsoft .NET Framework 对象转换为可在 Web 浏览器中显示的 HTML.
Export-Clixml 创建对象的基于 XML 的表示形式并将其存储在文件中.
Export-Csv 将 Microsoft .NET Framework 对象转换为一系列以逗号分隔的、长度可变的 (CSV) 字符串, 并将这些字符串保存到一个 CSV 文件中.
ForEach-Object 针对每一组输入对象执行操作.
Format-List 将输出的格式设置为属性列表, 其中每个属性均各占一行显示.
Format-Table 将输出的格式设置为表.
Format-Wide 将对象的格式设置为只能显示每个对象的一个属性的宽表.
Get-Unique 从排序列表返回唯一项目.
Group-Object 指定的属性包含相同值的组对象.
Import-Clixml 导入 CLIXML 文件, 并在 Windows PowerShell 中创建相应的对象.
Measure-Object 计算对象的数字属性以及字符串对象(如文本文件)中的字符数、单词数和行数.
more 对结果分屏显示.
Out-File 将输出发送到文件.
Out-Null 删除输出, 不将其发送到控制台.
Select-Object 选择一个对象或一组对象的指定属性.它还可以从对象的数组中选择唯一对象, 也可以从对象数组的开头或末尾选择指定个数的对象.
Sort-Object 按属性值对象进行排序.
Where-Object 创建控制哪些对象沿着命令管道传递的筛选器.

在ForEach-Object中, $_代表当前对象, 当然也允许通过$_,调用该对象支持的方法.

Get-Content 逐行读取文本的内容, 然后把文本的每一行传递给管道.因此, 在你想读取一个长文件的前10行, 应当使用Select-Object:

Get-Content $env:windir\windowsupdate.log | Select-Object -first 10

使用Select-String可以过滤出文本文件中的信息.下面的命令行会从windowsupdate.log文件中过滤出包含"added update"短语的行

1
2
3
4
Get-Content $env:windir\windowsupdate.log | Select-String "Added update"

# 列出当前文件夹下所有powershell脚本, 并重命名为 Script1.ps1, Script2.ps1, Script3.ps1...
ls $directory*.ps1 | ForEach-Object {$x=0} { Rename-Item $_ ("Script " + $x + ".ps1"); $x++ } {"Finished!"}

Windows 凭证管理 cmdkey.exe

建立, 显示, 并删除已储存的用户名称和密码

这个命令的语法为: CMDKEY [{/add | /generic}:targetname {/smartcard | /user:username {/pass{:password}}} | /delete{:targetname | /ras} | /list{:targetname}] 范例: 列出可用的认证:

1
2
cmdkey /list
cmdkey /list:targetname

建立一般认证: 可以用 /generic 参数来取代 /add 参数, 以建立一般认证

删除现有认证:

1
2
3
cmdkey /delete:targetname
cmdkey /delete:Frank_Ma
cmdkey /generic:Frank_Ma /user:username /pass:password