[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 获取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
.........

回复 21# idwma


   多谢大侠指教
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

回复 20# 5i365


    为什么要省掉foreach?

TOP

本帖最后由 5i365 于 2022-3-25 07:10 编辑

回复 19# idwma


   大侠好, 我把上面改了一下, 定义为了一个函数, 想在显示结果后, 打开在线帮助, 但是死活搞不定, 好像哪个弯没转过来
  1. function gah ($str)
  2. {
  3.         gal |
  4.         where { $_.Name -eq $str } |
  5.         FT -Prop Definition, Name, helpuri -Auto
  6.         start $_.helpuri
  7. }
  8. gah sc
复制代码

第二种方法, 反过来了, 可以打开帮助, 但是显示的属性表却不对了

  1. function gah ($str)
  2. {
  3.         gal |
  4.         where {
  5.                 if ($_.Name -eq $str)
  6.                 {
  7.                         $_ | FT -Prop Definition, Name, helpuri -Auto
  8.                         start $_.helpuri
  9.                 }
  10.         }
  11. }
  12. gah sc
复制代码
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

回复 18# 5i365
  1. @(
  2. "item"
  3. "Content"
  4. "Process"
  5. ) -join '|' |
  6. %{
  7. $a = $_
  8. Get-Alias |sort{$_.Definition}| ?{ $_.Definition -notmatch $a } | %{ $_.Definition + ' -> ' + $_.name } | Add-Content "abc.txt"
  9. }
复制代码
1

评分人数

TOP

回复 17# idwma


    感谢!
用|合并之后是   item|Content|Process  不用加''吗?
另外, 合并的文件没有按A-Z的顺序排序,之后用 gc | sort | sc  的方法有点麻烦, 有没有更好的办法?

TOP

  1. cd "$HOME\Desktop"
  2. @(
  3. "item"
  4. "Content"
  5. "Process"
  6. ) -join '|' |
  7. %{
  8. $a = $_
  9. Get-Alias | ?{ $_.Definition -notmatch $a } | %{ $_.Definition + ' -> ' + $_.name } | Add-Content "abc.txt"
  10. }
复制代码

TOP

回复 15# idwma


    前面测试时想到了-notmatch ,刚刚又想到了Add-Content, 但是结果还是没有过滤掉关键字, 关且排序也不是整体的
  1. cd "$HOME\Desktop"
  2. @(
  3. "item"
  4. "Content"
  5. "Process"
  6. ) |
  7. %{
  8. $a = $_
  9. Get-Alias | ?{ $_.Definition -notmatch $a } | %{ $_.Definition + ' -> ' + $_.name } | Add-Content "abc.txt"
  10. }
复制代码

TOP

回复 14# 5i365


    用notmatch

TOP

回复 10# idwma


    大侠好, 我楼上写的代码, 现在, 我想反过来, 排除数组  "item","Content","Process"     中所包含的那些项, 将余下的导出为1个abc.txt文件, 应该怎么改? 试了一下, 改不成功.

TOP

回复 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. }
复制代码

TOP

本帖最后由 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"
}

TOP

回复 10# idwma


    多谢大侠指引

TOP

回复 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
复制代码

TOP

回复 8# idwma


    晕在, 我认为两个不一样?
是不是, 一个用在.split()的后面, 一个用在-split 的后面  ?

TOP

返回列表