powershell-变量引用无效';:';后跟的变量名字符无效
我想做的是,让radarr在将电影移动到persons文件夹后删除从web客户端请求的电影,因此,如果默认路径为D:\Movies\则只需记录它,如果它转到D:\Movies\以外的任何其他位置,则它将从客户端删除它 寻找一些指导,因为我是全新的powershellpowershell-变量引用无效';:';后跟的变量名字符无效,powershell,Powershell,我想做的是,让radarr在将电影移动到persons文件夹后删除从web客户端请求的电影,因此,如果默认路径为D:\Movies\则只需记录它,如果它转到D:\Movies\以外的任何其他位置,则它将从客户端删除它 寻找一些指导,因为我是全新的powershell $movie_path = $env:radarr_moviefile_relativepath $default_path = "D:\Movies\" $RADARRIP="localhost" $RADARRPORT="78
$movie_path = $env:radarr_moviefile_relativepath
$default_path = "D:\Movies\"
$RADARRIP="localhost"
$RADARRPORT="7878"
$RADARRAPIKEY="******"
$Logfile = "C:\Custom Scripts\Radarr.log"
Function LogWrite
{
Param ([string]$logstring)
Add-content $Logfile -value $logstring
}
if ($default_path == $movie_path)
{
LogWrite $movie_path $radarr_movie_id "added to server"
LogWrite " "
}
else
{
Invoke-WebRequest -Uri http://$RADARRIP:$RADARRPORT/api/movie/$radarr_movie_id" -X GET -H "X-Api-Key: $RADARRAPIKEY -k
LogWrite $movie_path $radarr_movie_id "added to server"
LogWrite $radarr_movie_id "selected movie from server"
Invoke-WebRequest -Uri http://$RADARRIP:$RADARRPORT/api/movie/$radarr_movie_id" -X DELETE -H "X-Api-Key: $RADARRAPIKEY -k
LogWrite $radarr_movie_id "movie removed from list"
LogWrite " "
}
错误
+ Invoke-WebRequest -Uri http://$RADARRIP:$RADARRPORT/api/movie/$radarr ...
+ ~~~~~~~~~~
Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.
At \\WIN-TQS12RTGKSQ\Custom Scripts\radarr.ps1:29 char:31
+ Invoke-WebRequest -Uri http://$RADARRIP:$RADARRPORT/api/movie/$radarr ...
+ ~~~~~~~~~~
Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : InvalidVariableReferenceWithDrive
当您使用无引号的复合字符串作为命令参数时,PowerShell会隐式地将其视为可扩展字符串,即,就好像它是用双引号(“…”
)括起来传递的一样
提供PowerShell中可扩展字符串(字符串插值)的全面概述
相关方面是,变量引用(如$RADARRIP
)之后的a:
被视为该变量引用的一部分:介于$
和:
之间的部分被视为(PowerShell)驱动器的名称,:
后面应该是该驱动器中某个项目的名称或路径;也就是说,变量引用被解释为PowerShell的实例
因此,必须明确告知PowerShell,:
以下$RADARRIP
不是变量引用的一部分,您有几个选项:
- PowerShell最惯用的选项是使用
来描述变量名:{…}
- 或者,使用PowerShell的转义字符
,转义`
,以便将其视为文本::
- 最后,引用
也有选择性地起作用,如中所示;但是,一个好习惯是对要逐字(逐字)使用的字符串使用单引号(:
),即如果不需要字符串插值:“…”
没有错误,必须简化它
$movie_path = $env:radarr_movie_path
$movie_id = $env:radarr_movie_id
$movie_name = $env:radarr_movie_title
function Get-TimeStamp {
return "[{0:MM/dd/yy} {0:HH:mm:ss}]" -f (Get-Date)
}
Function LogWrite
{
Param ([string]$logstring)
Add-content $Logfile -value $logstring
}
$Logfile = "C:\Custom Scripts\Radarr.log"
if ($movie_path.contains("D:\Movies\"))
{
LogWrite "$(Get-TimeStamp) | $movie_path | $movie_id | added to server"
}
else
{
Invoke-WebRequest -Uri http://127.0.0.1:7878/api/movie/"$movie_id"?apikey=YourAPIkey -Method Delete
LogWrite "$(Get-TimeStamp) | $movie_path | $movie_id | $movie_name | movie removed from list"
}
你的问题中对未来读者普遍感兴趣的部分,在你的回答中有涉及,我希望在我的回答中有更全面的涉及。相比之下,这个答案所基于的用例的细节只是:特定于您。基于这些考虑,我鼓励您给出答案。如果您不接受人们在此处发布可能在将来帮助人们的成品,我向mklement0道歉,如果我在一个网站/论坛上提出问题,一旦我采纳了所有建议,我将发布最终项目,鼓励人们操纵我的代码以使他们受益。这不是接受你是否发布自己的答案的问题,这是关于达成共识的问题:我试图论证为什么我的答案更有可能对未来的读者有用,因此接受它是有意义的。但这并不妨碍你发布自己的答案,不过——再一次——这对你来说似乎非常特殊。更重要的是,您的答案令人困惑,因为令人不快的
:
不再是答案的一部分。总之:-1用于发布不解决原始问题的解决方案(如问题标题中突出显示的),以及对原始代码的详细信息进行令人困惑的更改。一般来说,SO的价值不在于发布问题附带的完整解决方案:它是关于有重点的问题,只有尽可能多的代码来描述问题,以及类似的有重点的答案。
Invoke-WebRequest -Uri http://$RADARRIP`:$RADARRPORT/api/movie/$radarr_movie_id ...
Invoke-WebRequest -Uri http://$RADARRIP':'$RADARRPORT/api/movie/$radarr_movie_id ...
$movie_path = $env:radarr_movie_path
$movie_id = $env:radarr_movie_id
$movie_name = $env:radarr_movie_title
function Get-TimeStamp {
return "[{0:MM/dd/yy} {0:HH:mm:ss}]" -f (Get-Date)
}
Function LogWrite
{
Param ([string]$logstring)
Add-content $Logfile -value $logstring
}
$Logfile = "C:\Custom Scripts\Radarr.log"
if ($movie_path.contains("D:\Movies\"))
{
LogWrite "$(Get-TimeStamp) | $movie_path | $movie_id | added to server"
}
else
{
Invoke-WebRequest -Uri http://127.0.0.1:7878/api/movie/"$movie_id"?apikey=YourAPIkey -Method Delete
LogWrite "$(Get-TimeStamp) | $movie_path | $movie_id | $movie_name | movie removed from list"
}