有用的PowerShell一个衬里

时间:2009-03-05 15:33:37

标签: .net powershell scripting scripting-language

提供一行有用的PowerShell脚本,请为每个答案提供一个脚本。

有一个类似的question here,但是这个只提供带脚本的页面的链接,在这里逐一给出答案,并提供最常用或最有用的脚本的贡献列表。

  1. 列出最新版本的文件

    ls -r -fi *.lis | sort @{expression={$_.Name}}, @{expression={$_.LastWriteTime};Descending=$true} | select Directory, Name, lastwritetime | Group-Object Name | %{$_.Group | Select -first 1}

  2. gps programThatIsAnnoyingMe | kill

  3. 使用已注册的程序打开文件(例如start例如start foo.xls

    ii foo.xls

  4. 检索并显示系统特殊文件夹的路径

    [enum]::getvalues([system.environment+specialfolder]) | foreach {"$_ maps to " + [system.Environment]::GetFolderPath($_)}

  5. 将环境值复制到剪贴板(现在你知道如何使用剪贴板!)

    $env:appdata | % { [windows.forms.clipboard]::SetText($input) }
    OR
    ls | clip

  6. 使用SnapIns

    1. TFS中两个变更集编号之间的文件

      Get-TfsItemHistory <location> -Recurse -Version <label1>~<label2> | % { $(Get-TfsChangeset $_.ChangeSetID).Changes } | % { $_.Item.ServerItem } | Sort-Object -Unique

    2. 获取有关Exchange 200中所有Hub服务器错误的队列消息

      Get-ExchangeServer | ?{$_.IsHubTransportServer -eq $true} | Get-Queue | ?{$_.LastError -ne $null} | Sort-Object -Descending -Property MessageCount | ft -Property NextHopDomain,@{l="Count";e={$_.MessageCount}},@{l="Last Try";e={$_.LastRetryTime.tosting("M/dd hh:mm")}},@{l="Retry";e={$_.NextRetryTime.tostring("M/dd hh:mm")}},Status,LastError -AutoSize

19 个答案:

答案 0 :(得分:21)

大约下午6点....

exit

答案 1 :(得分:13)

嗯,这是我经常使用的一些解释。

ii .

ii是Invoke-Item的别名。此命令行开关实质上调用在Windows中为以下项目注册的任何命令。所以这个:

ii foo.xls

将在Excel中打开foo.xls(假设您已安装Excel并且.xls文件与Excel关联)。

ii .中,.引用当前工作目录,因此该命令将导致Windows资源管理器在当前目录中打开。

答案 2 :(得分:13)

列出我今天更新的所有文件:

dir | ?{$_.LastWriteTime -ge [DateTime]::Today}

经常使用它我实际上在我的个人资料中创建了一个小功能:

function Where-UpdatedSince{
Param([DateTime]$date = [DateTime]::Today,
      [switch]$before=$False)
Process
{ 
    if (($_.LastWriteTime -ge $date) -xor $before)
    {
        Write-Output $_
    }
} 
};  set-item -path alias:wus -value Where-UpdatedSince

所以我可以说:

dir | wus
dir | wus "1/1/2009"

要查看今天之前更新的内容:

dir | wus -before

答案 3 :(得分:6)

我最喜欢的powershell one liner

gps programThatIsAnnoyingMe | kill

答案 4 :(得分:4)

($x=new-object xml).Load("http://rss.slashdot.org/Slashdot/slashdot");$x.RDF.item|?{$_.creator-ne"kdawson"}|fl descr*

我最喜欢的:这是一个斜线读者没有先生提出的可怕提交。 kdawson。它被设计为少于120个字符,允许它在/.// p>上用作签名

答案 5 :(得分:3)

检索并显示系统特殊文件夹的路径

[enum]::getvalues([system.environment+specialfolder]) | foreach {"$_ maps to " + [system.Environment]::GetFolderPath($_)}

答案 6 :(得分:3)

我发现显示环境变量的值很有用

dir env:

您还可以将env值复制到剪贴板

$env:appdata | % { [windows.forms.clipboard]::SetText($input) }

(你需要在调用之前加载windows.forms:Add-Type -a system.windows.forms;并使用-STA开关运行PowerShell)

答案 7 :(得分:3)

我毫不犹豫地逐一列举我的PowerShell单行列表,因为目前列表中只有400个条目! :-)但是这里有一些我的最爱,激起你的兴趣:

  • 列出所有类型加速器(需要PSCX):[accelerators]::get
  • 将XML的字符串表示形式转换为实际的XML:[xml]"<root><a>...</a></root>"
  • 转储对象(增加深度以获取更多细节):$PWD | ConvertTo-Json -Depth 2
  • 通过子字符串从历史记录中调用命令(早先查找&#39; cd&#39; cmd):#cd
  • 访问C#枚举值:[System.Text.RegularExpressions.RegexOptions]::Singleline
  • 生成条形图(需要Jeff Hicks&#39; cmdlet):ls . | select name,length | Out-ConsoleGraph -prop length -grid

整个系列在Simple-Talk.com上发布的4部分系列中公开发售 - 我希望这些对SO读者有用!

我想打电话给&#34;在PowerShell的一行中做任何事情&#34; ,但我的编辑想要更简洁一些,所以我们选择了 PowerShell One-Liners < / em>的。虽然为了充分披露,但只有98%左右的人才是真正意义上的单行者;我觉得这很接近于四舍五入......: - )

答案 8 :(得分:3)

我不喜欢用于计算代码行的复杂应用程序,特别是因为我认为它首先是一个虚假的度量标准。我最终使用的是PS one-liner:

PS C:\Path> (dir -include *.cs,*.xaml -recurse | select-string .).Count

我只是包含我想要包含在行数中的文件的扩展名,并从项目的根目录中获取它。

答案 9 :(得分:3)

取消Visual Studio 2012 ALL CAPS菜单 - 安装VS2012后我做的第一件事。

Set-ItemProperty -Path HKCU:\Software\Microsoft\VisualStudio\11.0\General -Name SuppressUppercaseConversion -Type DWord -Value 1

感谢Richard Banks发现了注册表值。

答案 10 :(得分:2)

这显示哪些进程正在使用哪个版本的MS CRT DLL:

gps | select ProcessName -exp Modules -ea 0 | 
  where {$_.modulename -match 'msvc'} | sort ModuleName | 
  Format-Table ProcessName -GroupBy ModuleName

答案 11 :(得分:2)

由于我安装了TFS PowerTools快照,这可能是作弊,但这对于找出两个变更集,版本或标签之间的文件已更改非常有用。

Get-TfsItemHistory <location> -Recurse -Version <label1>~<label2> | 
% { $(Get-TfsChangeset $_.ChangeSetID).Changes } |
% { $_.Item.ServerItem } | Sort-Object -Unique

答案 12 :(得分:1)

在文件中生成一些伪随机字节。

[Byte[]]$out=@(); 0..9 | %{$out += Get-Random -Minimum 0 -Maximum 255}; [System.IO.File]::WriteAllBytes("random",$out)

Get-Random算法从系统时钟中获取种子,因此不要将其用于严重的加密需求。

答案 13 :(得分:1)

将某些内容的输出传递给剪贴板

ls | clip

答案 14 :(得分:0)

cls

在我尝试的每个命令之后摆脱所有难以处理的 - 红色标记,让我恢复一个漂亮的高清晰屏幕。

答案 15 :(得分:0)

按字母顺序列出所有Windows提供程序:

get-winevent -listprovider microsoft-windows* | % {$_.Name} | sort

实际上,您可以将此通配符用​​于任何特定的提供商组:

get-winevent -listprovider microsoft-windows-Securit* | % {$_.Name} | sort

答案 16 :(得分:0)

将一些内容复制到桌面:

Copy-Item $home\*.txt ([Environment]::GetFolderPath("Desktop"))

答案 17 :(得分:0)

功能显示的系统正常运行时间 我将此用作会计电子表格

    function get-uptime
{
$PCounter = "System.Diagnostics.PerformanceCounter"
$counter = new-object $PCounter System,"System Up Time"
$value = $counter.NextValue()
$uptime = [System.TimeSpan]::FromSeconds($counter.NextValue())
"Uptime: $uptime"
"System Boot: " + ((get-date) - $uptime)
}

答案 18 :(得分:0)

获取Exchange 2007中所有Hub服务器上的错误的队列消息(带有一些格式)

Get-ExchangeServer | ?{$_.IsHubTransportServer -eq $true} | Get-Queue | ?{$_.LastError -ne $null} | Sort-Object -Descending -Property MessageCount | ft -Property NextHopDomain,@{l="Count";e={$_.MessageCount}},@{l="Last Try";e={$_.LastRetryTime.tosting("M/dd hh:mm")}},@{l="Retry";e={$_.NextRetryTime.tostring("M/dd hh:mm")}},Status,LastError -AutoSize