我正在编写一组PowerShell脚本来监控各种文件夹的大小。我遇到了一个错误,而且我不知道是什么造成的。
以下是代码,其中Write-Host
显示了我所期待的内容以及变量$ip
和$loc
实际包含的内容:
function getDriveLetter($ip) {
Write-Host $ip # prints: 192.168.10.10 myfolder1\myfolder2\
# expected: 192.168.10.10
switch($ip) {
"192.168.10.10" {return "E`$"; break}
"192.168.10.20" {return "D`$"; break}
default {"Unknown"; break}
}
}
function getFullPath($loc,$folder) {
Write-Host $loc # prints: 192.168.10.10 myfolder1\myfolder2\
# expected: 192.168.10.10
$drive = getDriveLetter("$loc")
$str = "\\$loc\$drive\DATA\$folder"
return $str
}
function testPath($loc,$folder) {
$mypath = getFullPath("$loc","$folder")
if (Test-Path $mypath) {
return $true
} else {
return $false
}
}
当我运行命令时:
testPath("192.168.10.10","myfolder1\myfolder2\")
我得到了一个错误的"结果,但如果我跑:
Test-Path "\\192.168.10.10\E`$\DATA\myfolder1\myfolder2\"
该命令返回True(应该如此)。
我错过了什么?我已经尝试强制变量设置为:
$mypath = getFullPath -loc "$loc" -folder "$folder"
但没有变化。如果它改变了什么,这是在Powershell版本4上。
答案 0 :(得分:3)
我建议你再多检查一下PowerShell的语法,因为那里有很多错误。 PowerShell与C#完全不同,你似乎做了很多假设。 :)
首先,这不是您调用PowerShell功能的方式。还不确定为什么你在参数周围添加引号?它们是多余的。如果你修复了函数调用,你的代码应该按预期运行。
$mypath = getFullPath $loc $folder
然后在你的switch语句中有一个分号,这也是错误的。然后,如果您只使用$
,则无需转义''
。中断也是多余的,因为在这种情况下返回退出函数。
"192.168.10.10" { return 'E$' }
此外,关于PowerShell的一个有趣的事情是:你可以摆脱getFullPath
中的回报:
function getFullPath($loc, $folder) {
$drive = getDriveLetter($loc)
"\\$loc\$drive\DATA\$folder"
}
PowerShell返回未捕获的输出,重要的是要注意,它可能是许多模糊错误的原因。
答案 1 :(得分:2)
问题在于你如何调用你的函数。函数参数在PowerShell中以空格分隔,并且不使用括号括起参数。
getFullPath $loc $folder
当您在括号中包装参数时,您将创建一个包含两个值的数组,并将该数组作为第一个参数传递。
getFullPath($loc, $folder)
这一行传递一个包含两个字符串@($loc, $folder)
的数组作为第一个参数,然后,因为该行上没有其他参数,它将$null
传递给第二个参数。在函数内部,然后将join
数组用作字符串,这是您观察到的行为。
答案 2 :(得分:2)
问题是如何将参数传递给函数。 查看以上链接的更多详情: How do I pass multiple parameters into a function in PowerShell?
<span id="span_guest{$_G[timestamp]}"></span>
<script>
var guest{$_G[timestamp]}=30;
function showtimeguest{$_G[timestamp]}(){
guest{$_G[timestamp]}--;
document.getElementById('span_guest{$_G[timestamp]}').innerHTML="Next customers will reach on "+Math.floor(guest{$_G[timestamp]}/60)+"minutes"+guest{$_G[timestamp]}%60+"second";
if(guest{$_G[timestamp]}<=0){
ajaxget('plugin.php?id=jnshopheroes&ajax=renewguesttime×tamp={TIMESTAMP}','guestlist');
ajaxget('plugin.php?id=jnshopheroes&ajax=renewguest×tamp={TIMESTAMP}&formhash={FORMHASH}','selllist');
clearTimeout(showtimeguest{$_G[timestamp]}); //add here
clearTimeout(showtimeguest{$_G[timestamp]}()); //add here
}
setTimeout("showtimeguest{$_G[timestamp]}()",1000);
}
setTimeout("showtimeguest{$_G[timestamp]}()",1000);
</script>