获取PowerShell别名中的带item的命令
执行Get-Alias命令后, 会有最下面的输出, 我想获取name那一列中, 包含item的命令, 用下面的几种代码都取不到值, 求高手支招, 感谢!!(Get-Alias).name | ?{ $_ -contains "item" }
(Get-Alias).name | ?{ $_ -like "*item*" }
Get-Alias | out-string | ?{ $_ -like "*item*" }
________________________________________________________________________________
CommandType Name Version Source
----------- ---- ------- ------
Alias % -> ForEach-Object
Alias ? -> Where-Object
Alias ac -> Add-Content
Alias asnp -> Add-PSSnapin
Alias cat -> Get-Content
Alias cd -> Set-Location
...........
_________________________________________________________________________________
期待最后的结果类似:
cp -> Copy-Item
cpi -> Copy-Item
cpp -> Copy-ItemProperty
.........
_________________________________________________________________________________
最好能交换前后位置改进一下,按字母顺序先后排列, 结果类似:
Copy-Item -> cp
Copy-Item -> cpi
Copy-ItemProperty -> cpp
......... [i=s] 本帖最后由 5i365 于 2022-2-19 14:26 编辑 [/i]
自己乱搞, 能得到第一种结果,但是不完美, 有空行, 交换前后的还没有搞定
(Get-Alias | Out-String) -split '\n' -like "*item*" -replace 'Alias\s+' 加了空行过滤还是有空行, 怪了
(Get-Alias | Out-String) -split '\n' -like "*item*" -replace 'Alias\s+' | ? { $_.trim() -ne "" } | Out-File aaa.txt [i=s] 本帖最后由 idwma 于 2022-2-19 17:04 编辑 [/i]
可以多用用对象
很多时候可以用|fl *查看可用对象,比如gal|fl *[code]gal|?{$_.Definition -match 'item'}|%{$_.Definition+' -> '+$_.name}[/code] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251777&ptid=61649]4#[/url] [i]idwma[/i] [/b]
大侠好, 我刚刚用绕弯的路了, 也实现了, 但是导出的文件前三行有空行, 想知道问题出在了哪, 跳过前三行, 是因为, 前面的三行没用
cd $HOME\Desktop
(Get-Alias | Out-String) -replace 'Alias\s+' -split '\r\n' |
select -skip 3 |
foreach{
$_.Trim() -Replace '(.*) -> (.*)', '$2 -> $1'
} |
sort |
Out-File A.txt [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251780&ptid=61649]5#[/url] [i]5i365[/i] [/b]
后面的空行排序后跑前面去了[code](Get-Alias | Out-String) -replace 'Alias\s+' -split '\r\n' -notmatch '^\s*$'|
select -skip 2 |
foreach{
$_.Trim() -Replace '(.*) -> (.*)', '$2 -> $1'
} |
sort |
Out-File A.txt[/code] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251782&ptid=61649]6#[/url] [i]idwma[/i] [/b]
多谢, 有点晕了 这里的 -split '\r\n' 下面是的贴子要 '`n' ?
[url]http://www.bathome.net/thread-61653-1-1.html[/url] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251785&ptid=61649]7#[/url] [i]5i365[/i] [/b]
\r\n
`r`n
晕在什么地方? [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251786&ptid=61649]8#[/url] [i]idwma[/i] [/b]
晕在, 我认为两个不一样? :lol
是不是, 一个用在.split()的后面, 一个用在-split 的后面 ? [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251787&ptid=61649]9#[/url] [i]5i365[/i] [/b]
有关键词的疑问可以先翻一下文档呀有最权威的说明了[code]https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_split
https://docs.microsoft.com/zh-cn/dotnet/api/system.string.split[/code] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251791&ptid=61649]10#[/url] [i]idwma[/i] [/b]
多谢大侠指引 [i=s] 本帖最后由 5i365 于 2022-2-20 12:16 编辑 [/i]
[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251777&ptid=61649]4#[/url] [i]idwma[/i] [/b]
大侠好, 又卡壳了, 我想输出N个字符串的别名, 写了下面的代码, $_ 成了谍中谍了, 请教怎么改? :lol
红色字是一个循环, 其它两个 Content 和 Process 也要循环, 用$_ 肯定不行了
cd "$HOME\Desktop"
@(
"[color=Red]item[/color]"
"Content"
"Process"
) |
%{
Get-Alias | ?{ $_.Definition -match '[color=Red]item[/color]' } | %{ $_.Definition + ' -> ' + $_.name } | Out-File "[color=Red]item[/color].txt"
} [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251791&ptid=61649]10#[/url] [i]idwma[/i] [/b]
自己搞定了[code]cd "$HOME\Desktop"
@(
"item"
"Content"
"Process"
) |
%{
$a = $_
Get-Alias | ?{ $_.Definition -match $a } | %{ $_.Definition + ' -> ' + $_.name } | Out-File "$a.txt"
}
[/code] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251791&ptid=61649]10#[/url] [i]idwma[/i] [/b]
大侠好, 我楼上写的代码, 现在, 我想反过来, 排除数组 "item","Content","Process" 中所包含的那些项, 将余下的导出为1个abc.txt文件, 应该怎么改? 试了一下, 改不成功. [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251828&ptid=61649]14#[/url] [i]5i365[/i] [/b]
用notmatch [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251831&ptid=61649]15#[/url] [i]idwma[/i] [/b]
前面测试时想到了-notmatch ,刚刚又想到了Add-Content, 但是结果还是没有过滤掉关键字, 关且排序也不是整体的[code]cd "$HOME\Desktop"
@(
"item"
"Content"
"Process"
) |
%{
$a = $_
Get-Alias | ?{ $_.Definition -notmatch $a } | %{ $_.Definition + ' -> ' + $_.name } | Add-Content "abc.txt"
}[/code] [code]cd "$HOME\Desktop"
@(
"item"
"Content"
"Process"
) -join '|' |
%{
$a = $_
Get-Alias | ?{ $_.Definition -notmatch $a } | %{ $_.Definition + ' -> ' + $_.name } | Add-Content "abc.txt"
}[/code] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251846&ptid=61649]17#[/url] [i]idwma[/i] [/b]
感谢!
用|合并之后是 item|Content|Process 不用加''吗?
另外, 合并的文件没有按A-Z的顺序排序,之后用 gc | sort | sc 的方法有点麻烦, 有没有更好的办法? [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251847&ptid=61649]18#[/url] [i]5i365[/i] [/b][code]@(
"item"
"Content"
"Process"
) -join '|' |
%{
$a = $_
Get-Alias |sort{$_.Definition}| ?{ $_.Definition -notmatch $a } | %{ $_.Definition + ' -> ' + $_.name } | Add-Content "abc.txt"
}[/code] [i=s] 本帖最后由 5i365 于 2022-3-25 07:10 编辑 [/i]
[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=251850&ptid=61649]19#[/url] [i]idwma[/i] [/b]
大侠好, 我把上面改了一下, 定义为了一个函数, 想在显示结果后, 打开在线帮助, 但是死活搞不定, 好像哪个弯没转过来:lol
[code]function gah ($str)
{
gal |
where { $_.Name -eq $str } |
FT -Prop Definition, Name, helpuri -Auto
start $_.helpuri
}
gah sc[/code]
第二种方法, 反过来了, 可以打开帮助, 但是显示的属性表却不对了
[code]function gah ($str)
{
gal |
where {
if ($_.Name -eq $str)
{
$_ | FT -Prop Definition, Name, helpuri -Auto
start $_.helpuri
}
}
}
gah sc[/code] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=253162&ptid=61649]20#[/url] [i]5i365[/i] [/b]
为什么要省掉foreach? [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=253190&ptid=61649]21#[/url] [i]idwma[/i] [/b]
多谢大侠指教
页:
[1]