Arrays Can';无法使powershell中的包含按预期工作

Arrays Can';无法使powershell中的包含按预期工作,arrays,powershell,contains,Arrays,Powershell,Contains,我正在尝试在Powershell中编写一个脚本,该脚本将匹配文件名的扩展名。这就是我到目前为止所做的: $location = $args[0]; [String]$extensions = @(".mkv", ".mp4", ".avi", ".wmv"); $pruneSize = 41240000; Set-Location $location; Get-ChildItem -Recurse | ForEach-Object { If($extensions -contain

我正在尝试在Powershell中编写一个脚本,该脚本将匹配文件名的扩展名。这就是我到目前为止所做的:

$location = $args[0];

[String]$extensions = @(".mkv", ".mp4", ".avi", ".wmv");
$pruneSize = 41240000;

Set-Location $location;

Get-ChildItem -Recurse | ForEach-Object {
    If($extensions -contains $_.Extension) {
        Write-Host "Found it";
    }
    else {
        Write-Host $_.Extension not found in $extensions;
    }
}
以下是输出:

.mp4 not found in .mkv .mp4 .avi .wmv
.bat not found in .mkv .mp4 .avi .wmv
.bat not found in .mkv .mp4 .avi .wmv
因此,它似乎应该工作,但它没有。如果我将“-contains”切换为“-match”,那么它就可以工作,尽管我不想使用match,因为它看起来是这样的-contains应该是我真正想要的,并且更准确地满足我的需要。我是不是错过了powershell的一些怪癖


谢谢

尝试从
$extensions

之前删除
[String]
尝试从
$extensions
之前删除
[String]
您的问题是将数组强制转换为
String
(多个对象->一个对象)。这将扩展与每个项目之间的空格连接在一起

[String]$extensions = @(".mkv", ".mp4", ".avi", ".wmv");

$extensions
.mkv .mp4 .avi .wmv
-contains
用于在数组中查找项。所以把演员放在弦上,一切都会好起来的

$extensions = @(".mkv", ".mp4", ".avi", ".wmv");

$extensions -contains ".mp4"
True

您的问题是,您正在将数组转换为
String
(多个对象->一个对象)。这将扩展与每个项目之间的空格连接在一起

[String]$extensions = @(".mkv", ".mp4", ".avi", ".wmv");

$extensions
.mkv .mp4 .avi .wmv
-contains
用于在数组中查找项。所以把演员放在弦上,一切都会好起来的

$extensions = @(".mkv", ".mp4", ".avi", ".wmv");

$extensions -contains ".mp4"
True