相关疑难解决方法(0)

如何在PowerShell中写入标准错误?

我无法弄清楚如何回显标准错误流并重定向可执行文件的错误流.

我来自Bourne shellKorn shell背景,我将使用它;

# Write to stderr
echo "Error Message!" >&2

# Redirect stderr to file
/do/error 2>/tmp/err.msg
Run Code Online (Sandbox Code Playgroud)

powershell stderr powershell-2.0

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

将stdin引入Powershell流

在命令行上指定文件名时,以下脚本运行良好.

tail.bat
@echo off
set "COUNT=%1"
set "COUNT=%COUNT:-=%"
set "FILENAME=%~2"
powershell "Get-Content %FILENAME% -Last %COUNT%"
Run Code Online (Sandbox Code Playgroud)

但是,我需要的是能够Get-Content从stdin 管道文本.我想编写以下内容以获取分配给项目的最后三个Subversion标记.我该怎么做才能使源Get-Content成为标准输入?

svn ls svn://ahost/arepo/aproject/tags | call tail.bat -3
Run Code Online (Sandbox Code Playgroud)

注意:我不允许tail从外面安装任何有用的工具.必须使用机器上已有的程序完成.

powershell batch-file

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

Where-Object 的意外行为

我刚刚遇到了一个意想不到的行为,Where-Object我找不到任何解释:

$foo = $null | Where-Object {$false}
$foo -eq $null
> True


($null, 1 | Measure-Object).Count
> 1

($foo, 1 | Measure-Object).Count
> 1


($null, $null, 1 | Measure-Object).Count
> 1

($foo, $foo, 1 | Measure-Object).Count
> 0
Run Code Online (Sandbox Code Playgroud)

如果 的条件Where-Object为假,$foo则应该为$null(这看起来是正确的)。

然而,$foo在任何值进入管道之前至少进行两次管道传输似乎会破坏它。

是什么原因造成的?


其他不一致之处:

($foo, $null, 1 | Measure-Object).Count
> 1

($foo, $null, $foo, 1 | Measure-Object).Count
> 0

($null, $foo, $null, 1 | Measure-Object).Count
> 1

($foo, 1, $foo, $foo …
Run Code Online (Sandbox Code Playgroud)

powershell

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

解释 Powershell [void] 行为

我的脚本将一些信息从 Sharepoint 站点导出到文件中.CSV

# Enter Web Application URL
$WebAppURL="http://server"

# Enter Path to CSV-file
$CSVFilePath="Path"

$SiteCollections = Get-SPWebApplication $WebAppURL | Get-SPSite -Limit All

$Tree = foreach ($Site in $SiteCollections) {
    foreach ($Web in $Site.AllWebs) {
    $Groups = New-Object System.Collections.ArrayList
        foreach ($Group in $web.Groups) {
            [void]$Groups.Add($Group.Name)
        }

        $Groups = $Groups -join ','
        [PSCustomObject]@{
            Url = $web.URL
            Title = $web.Title
            CountOfLists= $web.Lists.Count
            PermissionsInherited = $web.Permissions.Inherited
            Groups = $Groups
            }
    }
}

$Tree | Export-CSV $CSVFilePath -NoTypeInformation -Encoding UTF8
Run Code Online (Sandbox Code Playgroud)

如果我使用[void] …

powershell sharepoint void

3
推荐指数
1
解决办法
5508
查看次数

PowerShell 5.1 为什么这两个函数返回不同的类型

function Main {
    $result1 = DoWork1
    $result1.GetType()

    $result2 = DoWork2
    $result2.GetType()
}

function DoWork1 {
    $result1 = Invoke-Sqlcmd -Query "select top 1 * from customer" -ServerInstance "(localdb)\MSSQLLocalDB" -Database "Database1" -OutputAs DataTables
    #assign to variable then return
    return $result1
}

function DoWork2 {
    #return results without assigning to variable
    return Invoke-Sqlcmd -Query "select top 1 * from customer" -ServerInstance "(localdb)\MSSQLLocalDB" -Database "Database1" -OutputAs DataTables
}

Main
Run Code Online (Sandbox Code Playgroud)

这是意外的输出:

IsPublic IsSerial Name                                     BaseType                                                                                    
-------- -------- ----                                     --------                                                                                    
True     False    DataRow                                  System.Object                                                                               
True     True …
Run Code Online (Sandbox Code Playgroud)

powershell

3
推荐指数
1
解决办法
151
查看次数

为什么 Range.BorderAround 向控制台发出“True”?

使用 BorderAround 会向控制台发出“True”。

$range = $sum_wksht.Range('B{0}:G{0}' -f ($crow))
$range.BorderAround(1, -4138)
Run Code Online (Sandbox Code Playgroud)

这可以通过使用以下方法之一来克服。

$wasted = $range.BorderAround(1, -4138)
[void]$range.BorderAround(1, -4138)
Run Code Online (Sandbox Code Playgroud)

为什么需要这个?我没有正确创建范围吗?有更好的解决方法吗?

excel powershell output

2
推荐指数
1
解决办法
264
查看次数