Powershell 写主机在我的脚本中工作,但写和写输出会破坏它

Powershell 写主机在我的脚本中工作,但写和写输出会破坏它,powershell,Powershell,我一直在脚本中使用Write Host,但我希望此文本显示在输出文件中,因此我尝试将其更改为Write或Write output。当我这样做时,我的部分代码崩溃。我不明白为什么 我还希望在脚本运行时在控制台上看到输出,而不仅仅是在文件中 此代码有效 function Load-Configuration([string] $ConfigurationFileName) { $ConfigurationFilePath = Join-Path -Path $ScriptFileFolder

我一直在脚本中使用
Write Host
,但我希望此文本显示在输出文件中,因此我尝试将其更改为
Write
Write output
。当我这样做时,我的部分代码崩溃。我不明白为什么

我还希望在脚本运行时在控制台上看到输出,而不仅仅是在文件中

此代码有效

function Load-Configuration([string] $ConfigurationFileName)
{
    $ConfigurationFilePath = Join-Path -Path $ScriptFileFolder -ChildPath $ConfigurationFileName
    Write-Host "Configuration file is located here: $ConfigurationFilePath"
    if(Test-Path -Path $ConfigurationFilePath)
    {
        . $ConfigurationFilePath
    }
    else
    {
        Throw "Configuration file `"$ConfigurationFilePath`" not found."
    }
}
但写输出崩溃

function Load-Configuration([string] $ConfigurationFileName)
{
    $ConfigurationFilePath = Join-Path -Path $ScriptFileFolder -ChildPath $ConfigurationFileName
    Write-Output "Configuration file is located here: $ConfigurationFilePath"
    if(Test-Path -Path $ConfigurationFilePath)
    {
        . $ConfigurationFilePath
    }
    else
    {
        Throw "Configuration file `"$ConfigurationFilePath`" not found."
    }
}
错误:

Property 'BuildDestination' cannot be found on this object. Make sure that it exists.
At C:\Users\<user>\Desktop\eSignAutoDeploy\eSignUpgradeScript.ps1:43 char:4
+ if(!(Test-Path -Path $Config.BuildDestination)){
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], PropertyNotFoundException
    + FullyQualifiedErrorId : PropertyNotFoundStrict
在此对象上找不到属性“BuildDestination”。确保它存在。 在C:\Users\\Desktop\eSignAutoDeploy\eSignUpgradeScript.ps1:43 char:4 +if(!(测试路径-路径$Config.BuildDestination)){ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:NotSpecified:(:)[],PropertyNotFoundException +FullyQualifiedErrorId:PropertyNotFoundStrict
您是否以任何方式处理加载配置的输出?如果是这样,您只需在函数的输出中添加一个需要说明的字符串。对于这种类型的输出,我通常使用
Write Verbose
。大多数情况下,我不想看到详细信息,但当我看到时,我只需添加一个-Verbose参数。这就是详细输出的ort不会与std输出混淆。要使此工作正常,请按如下方式声明您的函数:

function Load-Configuration([Parameter()][string] $ConfigurationFileName)
然后你可以这样称呼它:

Load-Configuration config.xml -verbose

您的错误与您的代码不匹配。
写入输出
不是它所抱怨的,而是
$Config.BuildDestination
。在您的代码示例中,我甚至没有看到
$Config
。您的代码看起来很好。错误可能来自早期版本?