我有以下Powershell代码:
function readConfigData
{
$workingDir = (Get-Location).Path
$file = ""
if ($Global:USE_LOCAL_SERVER)
{
$file = $workingDir + '\Configs\Localhost.ini'
}
else
{
$file = $workingDir + '\Configs\' + $env:COMPUTERNAME + '.ini'
}
Write-Host 'INIFILE: ' $file
if (!$file -or ($file = ""))
{
throw [System.Exception] "Ini fil är inte satt."
}
if (!(Test-Path -Path $file))
{
throw [System.Exception] "Kan inte hitta ini fil."
}
}
readConfigData
我应该如何声明可以传递给函数Test-Path
的局部变量$file
。我的局部变量$file被填充,但当我将其作为其他函数的参数时,它就像它超出了范围。
我读了关于scopes的文章,但没能弄明白。
当前我收到错误:
ini文件:D:\Projects\scripts\Configs\HBOX。ini测试路径:无法将参数绑定到参数“Path”,因为它是空字符串。在D:\项目\自由职业者。com\nero2000\cmd脚本到powershell\script。ps1:141字符:27如果(!(测试路径-路径$文件))~~~~~类别信息:InvalidData:(:)[测试路径],ParameterBindingValidationException FullyQualifiedErrorId:ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft。PowerShell。命令。TestPathCommand
我将定义一个函数Get-ConfigFile
来检索配置并为本地服务器添加开关
:
function Get-ConfigFile
{
Param(
[switch]$UseLocalServer
)
$workingDir = (Get-Location).Path
if ($UseLocalServer.IsPresent)
{
Join-Path $workingDir '\Configs\Localhost.ini'
}
else
{
Join-Path $workingDir ('\Configs\{0}.ini' -f $env:COMPUTERNAME)
}
}
我还将使用Join-Path cmdlet连接路径,而不是字符串连接。
现在您可以使用以下命令检索配置文件路径:
$configFile = Get-ConfigFile -UseLocalServer:$Global:USE_LOCAL_SERVER
如果需要,请确保文件存在:
if (-not(Test-Path -Path $configFile))
{
throw [System.Exception] "Kan inte hitta ini fil."
}
注意:Get Location将为您提供当前powershell路径(工作位置),如果要获取脚本所在的路径,请改用此路径:
$workingDir = split-path -parent $MyInvocation.MyCommand.Definitio
正如其他人所提到的,您在第一个if(!$file…语句中无意中为$file指定了一个空字符串。这确实是您的问题的根源。
但是,代替:
if (!$file -or ($file = ""))
你可以使用这个forumula,我发现它可以更好地解释自己:
if([String]::IsNullOrEmpty($file))
if (!$file -or ($file = ""))
应替换为
if (!$file -or ($file -eq ""))
您将$file分配给第一个if子句中的空字符串,因此您的变量在Test-Path调用中为空。
编辑:还有一些选择:如何在PowerShell中检查字符串是否为null或空?
你可以用
if([string]::IsNullOrEmpty($file))
甚至只是
if(!$file)
问题内容: 我想编写Docker容器管理的脚本,但是我发现很难将PS变量传递给Docker命令,特别是由于路径格式的差异。 以下行(*)和您可以在此处找到的赞都可以 使用,但是很不方便: 的确,PS 非常适合MSI安装程序,您需要查看弹出窗口并控制其可见性级别,以便了解无提示安装程序正在运行。取而代之的是,您不想每次运行控制台应用程序时都启动一个新窗口,尤其是在Docker中,在其中您与调用程序和
问题内容: 此代码无法正常工作。我想要的只是将变量发送到 正确的方法是什么?: 脚本 问题答案: myFile.php:
问题内容: 我有Google地图提供的JavaScript值,需要将其保存在MySQL数据库中。 其实我有变量 我需要将该变量传递给PHP变量lugar 问题答案: 如果要在页面转换时进行操作,则可以通过表单或在URL中传递它,然后仅使用或接收变量。 如果您需要无缝完成它,那么您可能需要考虑使用AJAX。
问题内容: 我正在使用TodoMVC应用程序来更好地使用AngularJS框架。在第14-16行的index.html中,您将看到以下内容: 注意 ng-submit 指令如何在不将 newTodo 模型作为参数传递的情况下调用 addTodo() 函数。 __ 不久之后,我在第19行的同一文件中遇到了以下代码: 您可以看到作者这次决定将 allChecked 模型传递给 markAll() 函数
问题内容: doc中的示例: 但是,如果我需要使用这样的外部变量,该怎么办: 现在,我创建了新属性,并通过访问了它,但是还有其他更便捷的方法吗? 问题答案: 您可以使用关键字将必要的变量从父范围传递到闭包中。 例如: 在这里更多。 编辑(2019更新): PHP 7.4(将于2019年11月28日发布)引入了一种称为箭头函数的匿名函数的较短变体,这使得它的冗长程度有所降低。 使用PHP 7.4的示
问题内容: 我有一个PHP会话变量,在整个会话过程中仍然有效。在开头部分,我包含了我的JavaScript文件。 如果需要以下内容,如何将会话变量传递到JavaScript文件中。 由于无法在JavaScript文件中识别出,因此上面的代码不起作用。因此,我必须放入PHP文件本身,但是如何将其保留在JavaScript文件中? 问题答案: 在您的PHP文件中,您可以将用户设置为全局变量: 在包含外