【问题标题】:Run Linux commands from PowerShell从 PowerShell 运行 Linux 命令
【发布时间】:2018-02-16 22:33:35
【问题描述】:

我可以在 Linux 上运行以下代码以成功卸载磁盘。

alldisks=`/sbin/sfdisk -s | grep -v 'total' | awk -F':' '{print $1}'`
unmounted_disks=""

for disk in $alldisks
do
  /sbin/blkid -o list | grep -q "$disk"
  if [ $? -ne 0 ]; then
    unmounted_disks="$unmounted_disks $disk"
  fi
done

echo $unmounted_disks

但我正在使用 PowerShell 通过工作簿自动执行此操作。在使用New-SSHSession 连接后,我尝试了以下发送到 Linux 的方式:

**$script** = ('alldisks=`/sbin/sfdisk  -s | grep -v ''total'' | awk -F '':'' ''{print $1}''`
               unmounted_disks=""
               echo $unmounted_disks
               for disk in $alldisks
               do /sbin/blkid -o list | grep -q ''$disk''
               `n
               if [ $? -ne 0 ]
                 then unmounted_disks=''$unmounted_disks $disk''
               fi
               done
               echo $unmounted_disks')
$output = **Invoke-SSHCommand** -Index $session.SessionId **-Command $script** -TimeOut 900 -ErrorAction Stop

我得到以下错误:

bash:-c:第 8 行:意外标记 `fi' 附近的语法错误
bash:-c:第 8 行:`              fi '

【问题讨论】:

  • 首先获得一个更简单的命令来工作,然后开始添加花哨的东西。我还建议加入 1990 年代并使用命令替换的“现代”形式(即var=$( myCmd))而不是反引号。最后,假设将其作为一行处理,并用; 字符分隔所有 cmd 序列。祝你好运。
  • 谢谢谢特。我试过了,但是,双用。如果您能准确指出如果您编写命令的外观,将不胜感激。我的意思是整个 $script 变量
  • 什么“工作簿”? PowerShell 代码中的星号是做什么用的?

标签: linux powershell automation


【解决方案1】:

为您的脚本使用here-string

$script = @'
alldisks=`/sbin/sfdisk  -s | grep -v 'total' | awk -F ':' '{print $1}'`
unmounted_disks=""
echo $unmounted_disks
for disk in $alldisks
do
  /sbin/blkid -o list | grep -q "$disk"
  if [ $? -ne 0 ]; then
    unmounted_disks="$unmounted_disks $disk"
  fi
done
echo $unmounted_disks
'@

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2012-02-01
    • 2011-01-10
    • 2016-01-03
    相关资源
    最近更新 更多