相关疑难解决方法(0)

在PowerShell中选择阵列的所有对象上的一个属性的值

假设我们有一个对象数组$ objects.假设这些对象具有"名称"属性.

这就是我想要做的

 $results = @()
 $objects | %{ $results += $_.Name }
Run Code Online (Sandbox Code Playgroud)

这有效,但可以更好的方式完成吗?

如果我这样做:

 $results = objects | select Name
Run Code Online (Sandbox Code Playgroud)

$results是具有Name属性的对象数组.我希望$ results包含一个Name数组.

有没有更好的办法?

arrays powershell member-enumeration

115
推荐指数
3
解决办法
21万
查看次数

LINQ可以在PowerShell中使用吗?

我试图在PowerShell中使用LINQ.看起来这应该是完全可能的,因为PowerShell是建立在.NET Framework之上的,但我无法让它工作.例如,当我尝试以下(人为的)代码时:

$data = 0..10

[System.Linq.Enumerable]::Where($data, { param($x) $x -gt 5 })
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

无法找到"Where"和参数计数的重载:"2".

不要紧,这可以通过以下方式实现Where-Object.这个问题的关键不是找到在PowerShell中执行此操作的惯用方法.如果我可以使用LINQ,那么PowerShell中的一些任务将更轻松.

linq powershell

44
推荐指数
3
解决办法
2万
查看次数

PowerShell相当于LINQ Any()?

我想从存储在subversion中的脚本位置找到顶层的所有目录.

在C#中它会是这样的

Directory.GetDirectories(".")
  .Where(d=>Directories.GetDirectories(d)
     .Any(x => x == "_svn" || ".svn"));
Run Code Online (Sandbox Code Playgroud)

我在PowerShell中找到相当于"Any()"的东西有点困难,我不想经历调用扩展方法的尴尬.

到目前为止,我有这个:

 Get-ChildItem | ? {$_.PsIsContainer} | Get-ChildItem -force | ? {$_.PsIsContainer -and $_.Name -eq "_svn" -or $_.Name -eq ".svn"
Run Code Online (Sandbox Code Playgroud)

这找到了我svn自己的目录,但不是他们的父目录 - 这就是我想要的.如果您能告诉我添加的原因,可以获得奖励积分

 | Select-Object {$_.Directory}
Run Code Online (Sandbox Code Playgroud)

到该命令列表的末尾只显示一系列空行.

linq powershell

40
推荐指数
6
解决办法
2万
查看次数

如何使用Powershell Where-Object就像一个IN语句

我有以下代码可行:

foreach ($db in $svr.Databases | 
         where-object {
         $_.name -eq "testDB" 
         -or $_.name -eq "master"
         -or $_.name -eq "model"
         -or $_.name -eq "msdb" } )
{
  write-output $db.name
}
Run Code Online (Sandbox Code Playgroud)

这是一个更干净的方法吗?

就像是:

foreach ($db in $svr.Databases | 
         where-object {$_.name -in "testDB, master, model, msdb" } )    
{
  write-output $db.name
}
Run Code Online (Sandbox Code Playgroud)

sql-server powershell smo

18
推荐指数
3
解决办法
2万
查看次数

如何从powershell中的对象列表中获取特定字段的列表

我是 powershell 脚本编写的新手。如果我错过了一些简单的事情,请道歉。

假设我有一个名为 的对象object,它有一个名为 的字段field。现在列出这些对象。

我如何获得相同顺序的字段列表?

在 python 中它将是:

list_of_objects = [o1, o2, o3]
list_of_fields = [i.field for i in list_of_object]
Run Code Online (Sandbox Code Playgroud)

arrays powershell member-enumeration

6
推荐指数
1
解决办法
1万
查看次数

从文件 1 中删除 Powershell 中文件 2 中存在的行

我有一个 file1.txt,其中包含:

一号线
2号线
3号线
4号线

我想从 file1.txt 中删除存在于另一个 file2.txt 中的所有行:

线 3 线
2

结果应该是:

线 1
线 4

我尝试使用此命令,但仅当我在 file2.txt 中有一行时才有效:

Get-Content C:\file1.txt | Where-Object {$_ -notmatch $(get-content C:\file2.txt)} 
Run Code Online (Sandbox Code Playgroud)

注意:我不想比较 2 个文件以查看它们是否相同。

任何的想法?我对 powershell 很陌生。

windows powershell file

5
推荐指数
1
解决办法
2143
查看次数

在 Powershell 中选择 CSV 列,其中标题名称包含特定字符串

我有一个大约 10-15 列的数据文件,我想从中提取特定的列。有些列我知道确切的列标题,而其他列我只知道前两个字母将始终是“FC”。如何仅选择我知道列标题的列和以“FC”开头的列?从“FC”列开始,我尝试过这样的:

$myCSV = Import-CSV "mydata.txt" -Delimiter "`t"
$FCcols = $myCSV[0].psobject.Properties | foreach { $_.Name } | Where {$_ -match "FC"}
$myCSV | select $FCcols
Run Code Online (Sandbox Code Playgroud)

但我只是收到一个错误:

Select-Object : Cannot convert System.Management.Automation.PSObject to one of 
the following types {System.String, System.Management.Automation.ScriptBlock}.
At line:3 char:16
+ $myCSV | select <<<<  $FCcols
    + CategoryInfo          : InvalidArgument: (:) [Select-Object], NotSupport 
   edException
    + FullyQualifiedErrorId : DictionaryKeyUnknownType,Microsoft.PowerShell.Co 
   mmands.SelectObjectCommand
Run Code Online (Sandbox Code Playgroud)

然后,如果我尝试:

$myCSV = Import-CSV "mydata.txt" -Delimiter "`t"
$FCcols = [System.Collections.ArrayList]@()
$myCSV[0].psobject.Properties | foreach { $_.Name } | Where …
Run Code Online (Sandbox Code Playgroud)

csv powershell

5
推荐指数
1
解决办法
8572
查看次数

如何编写对象的单个属性的值?

这是我当前的脚本的样子:

$cpu = Get-WmiObject win32_processor | select LoadPercentage
logwrite $cpu #this fuction writes $cpu into a .txt file
Run Code Online (Sandbox Code Playgroud)

该文件的输出为:

@{LoadPercentage=4}
Run Code Online (Sandbox Code Playgroud)

我希望它只是数字,以便我进行计算。

powershell logfile select-object get-wmiobject

5
推荐指数
2
解决办法
1394
查看次数

将文件夹中的文件名输出到文本文件

使用 Windows 命令提示符或 Windows PowerShell,如何将单个目录中的所有文件名输出到文本文件,而不带文件扩展名?

在命令提示符中,我使用的是:

dir /b > files.txt
Run Code Online (Sandbox Code Playgroud)

结果

01 - Prologue.mp3
02 - Title.mp3
03 - End.mp3
files.txt
Run Code Online (Sandbox Code Playgroud)

所需输出

01 - Prologue
02 - Title
03 - End
Run Code Online (Sandbox Code Playgroud)

请注意,“dir /b > files.txt”命令包含文件扩展名并将文件名放在底部。

在不使用批处理文件的情况下,是否有一个干净的命令提示符或 PowerShell 命令可以完成我正在寻找的任务?

windows powershell command-prompt

5
推荐指数
1
解决办法
1万
查看次数

PowerShell 中字典中的字典

所以,我对 PowerShell 相当陌生,只是不知道如何使用数组/列表/哈希表。我基本上想做Python描述的以下事情:

entries = {
    'one' : {
        'id': '1',
        'text': 'ok'
    },
    'two' : {
        'id': '2',
        'text': 'no'
    }
}

for entry in entries:
    print(entries[entry]['id'])
Run Code Online (Sandbox Code Playgroud)

输出:

1

2


但这在 PowerShell 中是如何工作的呢?我尝试过以下方法:

$entries = @{
    one = @{
        id = "1";
        text = "ok"
    };
    two = @{
        id = "2";
        text = "no"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我不知道如何访问这些信息。

foreach ($entry in $entries) {
   Write-Host $entries[$entry]['id']
}
Run Code Online (Sandbox Code Playgroud)

=> 错误

powershell dictionary enumeration hashtable

4
推荐指数
1
解决办法
1574
查看次数