Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 我正在编写Mac Apple Management的脚本有问题_Macos_Scripting_Sh - Fatal编程技术网

Macos 我正在编写Mac Apple Management的脚本有问题

Macos 我正在编写Mac Apple Management的脚本有问题,macos,scripting,sh,Macos,Scripting,Sh,我是一名管理10台Mac电脑的技术员。我没有和MDM来管理它们。我手动一个接一个地管理它们。。。我有一些Mac电脑,即使它们不是管理员,它们的托管帐户也会变成管理员 我将编写一个脚本,以防止他们成为管理员 这是我的剧本: PASSWORD=$(echo U2FsdGVkX1+6JWRG1T9hsA/DIOfb2OZdXBf9uVcYTxY= | openssl enc -aes-128-cbc -a -d -salt -pass pass:wtf) echo $PASSWORD | sudo -

我是一名管理10台Mac电脑的技术员。我没有和MDM来管理它们。我手动一个接一个地管理它们。。。我有一些Mac电脑,即使它们不是管理员,它们的托管帐户也会变成管理员

我将编写一个脚本,以防止他们成为管理员

这是我的剧本:

PASSWORD=$(echo U2FsdGVkX1+6JWRG1T9hsA/DIOfb2OZdXBf9uVcYTxY= | openssl enc -aes-128-cbc -a -d -salt -pass pass:wtf)
echo $PASSWORD | sudo -u administrateur adminUsers=$(dscl . -read Groups/admin GroupMembership | cut -c 18-)
for user in $adminUsers
do
    if [ "$user" != "root" ]  && [ "$user" != "administrateur" ]
    then
        dseditgroup -o edit -d $user -t user admin
        if [ $? = 0 ]; then echo "Removed user $user from admin group"; fi
    else
        echo "Admin user $user left alone"
    fi
done
加密命令可以工作,但我的第二个命令(第2行)不能接受我的变量$PASSWORD,我有以下命令:

sudo: administrateur: command not found

脚本卡在第2行的“Administrator”处。

该行有几个问题

echo $PASSWORD | sudo -u administrateur adminUsers=$(dscl . -read Groups/admin GroupMembership | cut -c 18-)
首先,
$PASSWORD
不是双引号,因此几个特殊字符可能会导致问题。实际上,
echo
在特殊字符方面也有自己的问题,因此
printf“%s\n'$PASSWORD”
会更可靠

除了
sudo
不接受超过标准输入的密码,因此管道无论如何都无法工作

此外,您不能在
sudo
命令中执行变量赋值。可以,但它没有用,因为它会使子流程成为另一个用户,在该子流程中设置变量。。。然后退出子流程,使变量随之消失

评估的顺序完全错误。在运行任何命令之前(以及作为当前用户),shell将展开
$()
部分。因此,它扩展为:

 echo pwgoeshere | sudo -u administrateur adminUsers=root administrateur
。。。这将告诉
sudo
运行命令
administrator
,变量
adminUsers
设置为“root”。根本不是你想要的

但是有一个好消息:
dscl
可以从任何用户帐户读取组成员身份,因此您不需要
sudo
或任何其他帐户。只需使用:

adminUsers=$(dscl . -read Groups/admin GroupMembership | cut -c 18-)
另一方面,
dseditgroup
确实需要特殊权限才能更改组成员身份。此脚本作为哪个用户运行?如果它已经以
root
的身份运行,它就会正常工作。如果没有,您可以使用
sudo
(将密码传递给它会很复杂),或者更简单地将管理员凭据作为参数传递,使用
-u
和`-P选项:

dseditgroup -o edit -u administrateur -P "$PASSWORD" -d "$user" -t user admin

还有两个建议:使用小写变量名(例如,
password
而不是
password
),以避免与具有特殊含义的各种大写名称冲突,并运行脚本并更正它指出的内容。

不是
administrator
?(请原谅我的盎格鲁中心主义观点;-))。祝你好运