小编Kie*_*ies的帖子

Powershell Get-ChildItem -Filter与具有相同值的Where子句的操作方式不同

我在服务器上有一个名为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 filter get-childitem

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

使用$ site | Set-Item不会将更改保存回IIS站点

我正在编写一些自动脚本来使用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)

powershell iis-7 powershell-2.0

8
推荐指数
1
解决办法
1472
查看次数