找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 44027|回复: 21

[问题求助] 获取PowerShell别名中的带item的命令

[复制链接]
发表于 2022-2-19 13:45:13 | 显示全部楼层 |阅读模式
执行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
.........
 楼主| 发表于 2022-2-19 14:13:28 | 显示全部楼层
本帖最后由 5i365 于 2022-2-19 14:26 编辑

自己乱搞, 能得到第一种结果,但是不完美, 有空行, 交换前后的还没有搞定
(Get-Alias | Out-String) -split '\n' -like "*item*" -replace 'Alias\s+'
 楼主| 发表于 2022-2-19 14:35:29 | 显示全部楼层
加了空行过滤还是有空行, 怪了
(Get-Alias | Out-String) -split '\n' -like "*item*" -replace 'Alias\s+' | ? { $_.trim() -ne "" } | Out-File aaa.txt
发表于 2022-2-19 16:53:58 | 显示全部楼层
本帖最后由 idwma 于 2022-2-19 17:04 编辑

可以多用用对象
很多时候可以用|fl *查看可用对象,比如gal|fl *
  1. gal|?{$_.Definition -match 'item'}|%{$_.Definition+' -> '+$_.name}
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 乐于分享, 技术牛X

查看全部评分

 楼主| 发表于 2022-2-19 17:17:59 | 显示全部楼层
回复 4# idwma


大侠好, 我刚刚用绕弯的路了, 也实现了, 但是导出的文件前三行有空行, 想知道问题出在了哪, 跳过前三行, 是因为, 前面的三行没用

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
发表于 2022-2-19 17:37:04 | 显示全部楼层
回复 5# 5i365

后面的空行排序后跑前面去了
  1. (Get-Alias | Out-String) -replace 'Alias\s+' -split '\r\n' -notmatch '^\s*$'|
  2. select -skip 2 |
  3. foreach{
  4.         $_.Trim() -Replace '(.*) -> (.*)', '$2 -> $1'
  5. } |
  6. sort |
  7. Out-File A.txt
复制代码
 楼主| 发表于 2022-2-19 17:50:55 | 显示全部楼层
回复 6# idwma


    多谢, 有点晕了 这里的  -split '\r\n'   下面是的贴子要 '`n'  ?
http://www.bathome.net/thread-61653-1-1.html
发表于 2022-2-19 18:06:50 | 显示全部楼层
回复 7# 5i365


\r\n
`r`n
晕在什么地方?
 楼主| 发表于 2022-2-19 18:22:20 | 显示全部楼层
回复 8# idwma


    晕在, 我认为两个不一样?
是不是, 一个用在.split()的后面, 一个用在-split 的后面  ?
发表于 2022-2-19 22:06:05 | 显示全部楼层
回复 9# 5i365


有关键词的疑问可以先翻一下文档呀有最权威的说明了
  1. https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_split
  2. https://docs.microsoft.com/zh-cn/dotnet/api/system.string.split
复制代码
 楼主| 发表于 2022-2-20 09:42:59 | 显示全部楼层
回复 10# idwma


    多谢大侠指引
 楼主| 发表于 2022-2-20 12:13:27 | 显示全部楼层
本帖最后由 5i365 于 2022-2-20 12:16 编辑

回复 4# idwma


    大侠好, 又卡壳了, 我想输出N个字符串的别名, 写了下面的代码, $_ 成了谍中谍了, 请教怎么改?
红色字是一个循环, 其它两个  Content  和  Process 也要循环, 用$_ 肯定不行了

cd "$HOME\Desktop"
@(
        "item"
        "Content"
        "rocess"
) |
%{
        Get-Alias | ?{ $_.Definition -match 'item' } | %{ $_.Definition + ' -> ' + $_.name } | Out-File "item.txt"
}
 楼主| 发表于 2022-2-20 13:11:29 | 显示全部楼层
回复 10# idwma


    自己搞定了
  1. cd "$HOME\Desktop"
  2. @(
  3.         "item"
  4.         "Content"
  5.         "Process"
  6. ) |
  7. %{
  8.         $a = $_
  9.         Get-Alias | ?{ $_.Definition -match $a } | %{ $_.Definition + ' -> ' + $_.name } | Out-File "$a.txt"
  10. }
复制代码
 楼主| 发表于 2022-2-20 21:16:18 | 显示全部楼层
回复 10# idwma


    大侠好, 我楼上写的代码, 现在, 我想反过来, 排除数组  "item","Content","Process"     中所包含的那些项, 将余下的导出为1个abc.txt文件, 应该怎么改? 试了一下, 改不成功.
发表于 2022-2-20 21:48:16 | 显示全部楼层
回复 14# 5i365


    用notmatch
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:09 , Processed in 0.018982 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表