BUILTIN\Administrators 和普通管理员组之间的区别
Difference between BUILTIN\Administrators and normal Administrators Group
我有一个脚本可以在 VM 上启动应用程序并记录应用程序的一些数据。由于 Powershell 脚本不允许我 运行 应用程序在前台,我决定在 2 分钟后安排一个任务,然后继续轮询任务完成。
我正在使用这个命令来注册我的任务
$password= "password" | ConvertTo-SecureString -asPlainText -Force;
$username = "name";
$credential = New-Object System.Management.Automation.PSCredential($username,$password);
Invoke-Command -VMName INSTANCE_ID -Credential $credential -ScriptBlock
{
$gettime = (Get-Date).AddMinutes(2);
$run = $gettime.ToString('HH:mm');
$action = New-ScheduledTaskAction -Execute 'C:\logging.bat';
$trigger = New-ScheduledTaskTrigger -Once -At $run;
$principal = New-ScheduledTaskPrincipal -GroupID "BUILTIN\Administrators" -RunLevel Highest;
Register-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -TaskName "ID_Logging_Task" -Description "my description"
}
它工作正常,但它有一个问题,它 运行 只有在用户登录时才能正常工作。更多上下文 - https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/new-scheduledtaskprincipal?view=windowsserver2022-ps(示例 2)
所以我查看了 Register-ScheduledTask 的文档,看到我可以在注册任务时向命令提供用户名和密码。所以我使用了具有管理员权限的帐户的用户名和 运行 新命令:
$password= "password" | ConvertTo-SecureString -asPlainText -Force;
$username = "name";
$credential = New-Object System.Management.Automation.PSCredential($username,$password);
Invoke-Command -VMName INSTANCE_ID -Credential $credential -ScriptBlock
{
$gettime = (Get-Date).AddMinutes(2);
$run = $gettime.ToString('HH:mm');
$action = New-ScheduledTaskAction -Execute 'C:\logging.bat';
$trigger = New-ScheduledTaskTrigger -Once -At $run;
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "ID_Logging_Task" -RunLevel Highest -User "myUser" -Password "myPassword" -Description "my description"
}
“myUser”是这台机器的管理员。这解决了 运行 无需手动登录即可执行任务的问题,但现在我的应用程序是在后台而不是前台启动的,这是 运行 执行这些计划任务的重点。
我的问题是 BUILTIN\Administrators 和管理员帐户之间有什么区别。我该如何解决我的问题?我想 运行 使用 -GroupID“BUILTIN\Administrators” 的权限执行我的任务,而无需实际登录机器。
群与账号的区别
BuiltIn\Administrators 是您可以加入的群组。
管理员是默认帐户,通常在新 Windows 安装时被禁用。
有一种方法可以解决这个问题,可能比看起来更容易。
实现你想要的
I have a script which launches an app on the VM and logs some data for the app
让我们把它分成三部分
正在启动 VM
如果您希望您的 VM 始终 运行ning,您可以将其设置为 'Always Start'。这个选项很棒,因为它会与主机一起启动虚拟机,你甚至可以指定一个启动延迟,这很棒,因为这可以减轻磁盘和 cpu 的压力,因为启动虚拟机会导致两者的峰值这些资源。
如果您这样做,这将负责启动 VM。
正在启动应用程序
对于下一篇文章,这与您已经拥有的用于 运行 计划任务的语法一样简单。如果您想 运行 作为域帐户并 运行 作为管理员,只需将域帐户设为系统上 'Administrators' 组的成员即可。
运行 在前台
这是问题所在,但我不明白为什么这是个问题。当用户登录到计算机时,计划任务只会 运行 在前台。
有了这个选项,您可以在用户登录计算机时让应用程序出现在用户的会话中,例如 Kiosk 应用程序或 Point-Of-sale 系统、仪表板显示等。
如果您将某个应用设置为 运行,无论用户是否登录,那么它 将始终 运行 在后台运行。
你确定这很重要吗?
启动时在前台制作应用程序运行
如果您希望某个应用无需登录即可 运行,它会在后台 运行。
如果你真的想要到运行在前台,那么设置机器自动登录就可以了,如果是自动登录,那么它就会登录并显示桌面,然后定时任务可以改成'Run only when a user is logged in',这样就会运行在前台。
但是,为什么有人需要 VM 中的应用程序 ,它在前台本质上是无头的 到 运行?
我有一个脚本可以在 VM 上启动应用程序并记录应用程序的一些数据。由于 Powershell 脚本不允许我 运行 应用程序在前台,我决定在 2 分钟后安排一个任务,然后继续轮询任务完成。
我正在使用这个命令来注册我的任务
$password= "password" | ConvertTo-SecureString -asPlainText -Force;
$username = "name";
$credential = New-Object System.Management.Automation.PSCredential($username,$password);
Invoke-Command -VMName INSTANCE_ID -Credential $credential -ScriptBlock
{
$gettime = (Get-Date).AddMinutes(2);
$run = $gettime.ToString('HH:mm');
$action = New-ScheduledTaskAction -Execute 'C:\logging.bat';
$trigger = New-ScheduledTaskTrigger -Once -At $run;
$principal = New-ScheduledTaskPrincipal -GroupID "BUILTIN\Administrators" -RunLevel Highest;
Register-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -TaskName "ID_Logging_Task" -Description "my description"
}
它工作正常,但它有一个问题,它 运行 只有在用户登录时才能正常工作。更多上下文 - https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/new-scheduledtaskprincipal?view=windowsserver2022-ps(示例 2)
所以我查看了 Register-ScheduledTask 的文档,看到我可以在注册任务时向命令提供用户名和密码。所以我使用了具有管理员权限的帐户的用户名和 运行 新命令:
$password= "password" | ConvertTo-SecureString -asPlainText -Force;
$username = "name";
$credential = New-Object System.Management.Automation.PSCredential($username,$password);
Invoke-Command -VMName INSTANCE_ID -Credential $credential -ScriptBlock
{
$gettime = (Get-Date).AddMinutes(2);
$run = $gettime.ToString('HH:mm');
$action = New-ScheduledTaskAction -Execute 'C:\logging.bat';
$trigger = New-ScheduledTaskTrigger -Once -At $run;
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "ID_Logging_Task" -RunLevel Highest -User "myUser" -Password "myPassword" -Description "my description"
}
“myUser”是这台机器的管理员。这解决了 运行 无需手动登录即可执行任务的问题,但现在我的应用程序是在后台而不是前台启动的,这是 运行 执行这些计划任务的重点。
我的问题是 BUILTIN\Administrators 和管理员帐户之间有什么区别。我该如何解决我的问题?我想 运行 使用 -GroupID“BUILTIN\Administrators” 的权限执行我的任务,而无需实际登录机器。
群与账号的区别
BuiltIn\Administrators 是您可以加入的群组。
管理员是默认帐户,通常在新 Windows 安装时被禁用。
有一种方法可以解决这个问题,可能比看起来更容易。
实现你想要的
I have a script which launches an app on the VM and logs some data for the app
让我们把它分成三部分
正在启动 VM
如果您希望您的 VM 始终 运行ning,您可以将其设置为 'Always Start'。这个选项很棒,因为它会与主机一起启动虚拟机,你甚至可以指定一个启动延迟,这很棒,因为这可以减轻磁盘和 cpu 的压力,因为启动虚拟机会导致两者的峰值这些资源。
如果您这样做,这将负责启动 VM。
正在启动应用程序
对于下一篇文章,这与您已经拥有的用于 运行 计划任务的语法一样简单。如果您想 运行 作为域帐户并 运行 作为管理员,只需将域帐户设为系统上 'Administrators' 组的成员即可。
运行 在前台
这是问题所在,但我不明白为什么这是个问题。当用户登录到计算机时,计划任务只会 运行 在前台。
有了这个选项,您可以在用户登录计算机时让应用程序出现在用户的会话中,例如 Kiosk 应用程序或 Point-Of-sale 系统、仪表板显示等。
如果您将某个应用设置为 运行,无论用户是否登录,那么它 将始终 运行 在后台运行。
你确定这很重要吗?
启动时在前台制作应用程序运行 如果您希望某个应用无需登录即可 运行,它会在后台 运行。
如果你真的想要到运行在前台,那么设置机器自动登录就可以了,如果是自动登录,那么它就会登录并显示桌面,然后定时任务可以改成'Run only when a user is logged in',这样就会运行在前台。
但是,为什么有人需要 VM 中的应用程序 ,它在前台本质上是无头的 到 运行?