我在服务器上有一个名为MyFolder的文件夹.还有一些名为MyFolder.1,MyFolder.2,MyFolder.3等的文件夹.
如果我跑:
gci C:\Sample | ? { $_.Name -like "MyFolder.*" }
Run Code Online (Sandbox Code Playgroud)
我得到了预期的输出:
Directory: C:\Sample
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 16/10/2012 12:16 MyFolder.1
d---- 16/10/2012 12:16 MyFolder.2
d---- 16/10/2012 12:16 MyFolder.3
Run Code Online (Sandbox Code Playgroud)
但是如果我跑:
gci C:\Sample -Filter "MyFolder.*"
Run Code Online (Sandbox Code Playgroud)
我明白了:
Directory: C:\Sample
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 16/10/2012 12:16 MyFolder
d---- 16/10/2012 12:16 MyFolder.1
d---- 16/10/2012 12:16 MyFolder.2
d---- 16/10/2012 12:16 MyFolder.3
Run Code Online (Sandbox Code Playgroud)
我对MyFolder如何包含在输出中感到困惑.我希望输出是一样的.
该在线帮助突出了过滤器的语法是基于供应商,但我不能确定在这种情况下使用什么样的供应商.
我在这里错过了一个基本的知识吗?我试图将一个正则表达式字符串传递给过滤器,"MyFolder\.*"但这只是没有返回任何内容.我确定我错过了一些简单的事情.
我正在运行Powershell版本2.
感谢Roman Kuzmin指出了通配符匹配的不同之处.以下给出了预期的输出:
gci …Run Code Online (Sandbox Code Playgroud) 我正在编写一些自动脚本来使用PowerShell在服务器上创建/更新IIS站点.
目的是让一个配置对象可以由一个脚本处理,以完成所有繁重的工作.
我的配置HashTable如下所示:
$config = @{
AppPools = (
@{
Name="AppPool1"
Properties = @{
Enable32BitAppOnWin64=$true
ManagedRuntimeVersion="v4.0"
ProcessModel = @{
IdentityType = "NetworkService"
}
}
}
)
Websites = (
@{
Name="Site1"
Properties = @{
PhysicalPath = "C:\sites\site1"
ApplicationPool = "AppPool1"
}
}
)
}
Run Code Online (Sandbox Code Playgroud)
然后我的脚本使用配置来处理每个应用程序池和网站:
Import-Module WebAdministration
$config.AppPools |
% {
$poolPath = "IIS:\AppPools\$($_.Name)"
# Create if not exists
if(-not(Test-Path $poolPath)){ New-WebAppPool $_.Name }
# Update the properties from the config
$pool = Get-Item $poolPath
Set-PropertiesFromHash $pool $_.Properties …Run Code Online (Sandbox Code Playgroud)