相关疑难解决方法(0)

如何使用详细输出运行PowerShell脚本?

我想知道是否有办法运行PowerShell脚本,以便打印脚本的每一行的命令和输出.例如,在Bash中,您可以在脚本的顶部编写bash -x myscript或放置一个set -x.在批处理中,您将省略@echo off传统上留在脚本顶部的内容.PowerShell是否具有这些结构的等价物?

我尝试过的事情:跑步powershell -? | sls verbose,没有任何结果.

windows shell powershell windows-10

17
推荐指数
4
解决办法
4万
查看次数

是否可以检查Powershell中是否给出了-Verbose参数?

我编写了自己的Powershell日志记录函数Log,stream其中包含参数(写入消息的流)和message(要写入的消息).

我的想法是我可以将输出写入控制台和日志文件.我在函数中做的基本上是确定发布消息的流(使用switch语句),然后将消息写入流和日志文件:

switch ($stream) {
    Verbose {
        Write-Output "$logDate [VERBOSE] $message" | Out-File -FilePath $sgLogFileName -Append
        Write-Verbose $message
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,是否有可能检查是否给出了-Verbose参数?

目标是仅在给出-Verbose时将消息写入日志文件.

我已经查看了以下帮助文档,但没有找到任何帮助:
- help about_Parameters
- help about_commonparameters

此外,-WhatIf参数不适用于Write-Verbose.

非常感谢你的回答!

powershell

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

cmdlet如何知道它何时应该调用WriteVerbose()?

如何做一个cmdlet的知道什么时候真的应该叫WriteVerbose(), WriteDebug()等?

也许我想念一些简单的东西,但我找不到答案.到目前为止我见过的所有cmdlet实现都WriteVerbose()没有任何犹豫.我知道这样做是正确的,但它没有效果.

当详细模式关闭但cmdlet仍然为WriteVerbose()调用准备数据时,性能会受到影响,即无需任何操作.

换句话说,在cmdlet中我希望能够:

if (<VerboseMode>)
{
    .... data preparation, sometimes expensive ...
    WriteVerbose(...);
}
Run Code Online (Sandbox Code Playgroud)

但我不知道怎么做到这一点if (<VerboseMode>).有任何想法吗?


结论: @ stej的答案显示了如何在理论上获得所需的信息.在实践中,这是hacky并且不太可能合适.因此,如果cmdlet产生非常昂贵的详细或调试输出,那么引入指定详细级别的附加参数似乎是合理的.

powershell

6
推荐指数
3
解决办法
3912
查看次数

如何传播-详细到模块功能?

根据回答这样一个和我自己的经验,PowerShell的可以照顾传播-Verbose(和-Debug)自动,这是非常方便的。但是,当我要传播冗长的功能在模块中时,此操作停止。用于测试此代码:

在名为Modc:的目录中创建一个目录,并添加2个文件:

档案c:\Mod\Functions.ps1

function Show-VerbosityB { [cmdletbinding()]Param()
  Write-Output "Show-VerbosityB called"
  Write-Verbose "Show-VerbosityB is Verbose"
}
Run Code Online (Sandbox Code Playgroud)

档案c:\Mod\Mod.psd1

@{
ModuleVersion = '1.0.0.0'
NestedModules = @('Functions.ps1')
FunctionsToExport = @('*-*')
}
Run Code Online (Sandbox Code Playgroud)

现在创建主脚本,说c:\Foo.ps1

Import-Module c:\Mod

function Show-VerbosityA { [cmdletbinding()]Param()
  Write-Output "Show-VerbosityA called"
  Write-Verbose "Show-VerbosityA is Verbose"
}

function Show-Verbosity { [cmdletbinding()]Param()
  Write-Output "Show-Verbosity called"
  Write-Verbose "Show-Verbosity is Verbose"
  Write-Output "Testing propagation"
  Show-VerbosityA
  Show-VerbosityB
}

Show-Verbosity -Verbose
Run Code Online (Sandbox Code Playgroud)

结果是

PS> . C:\Foo.ps1
Show-Verbosity called
VERBOSE: Show-Verbosity is …
Run Code Online (Sandbox Code Playgroud)

powershell cmdlets

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

标签 统计

powershell ×4

cmdlets ×1

shell ×1

windows ×1

windows-10 ×1