powershell-变量引用无效';:';后跟的变量名字符无效

powershell-变量引用无效';:';后跟的变量名字符无效,powershell,Powershell,我想做的是,让radarr在将电影移动到persons文件夹后删除从web客户端请求的电影,因此,如果默认路径为D:\Movies\则只需记录它,如果它转到D:\Movies\以外的任何其他位置,则它将从客户端删除它 寻找一些指导,因为我是全新的powershell $movie_path = $env:radarr_moviefile_relativepath $default_path = "D:\Movies\" $RADARRIP="localhost" $RADARRPORT="78

我想做的是,让radarr在将电影移动到persons文件夹后删除从web客户端请求的电影,因此,如果默认路径为D:\Movies\则只需记录它,如果它转到D:\Movies\以外的任何其他位置,则它将从客户端删除它

寻找一些指导,因为我是全新的powershell

$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"
}