在启动时运行powershell脚本(.ps1)

时间:2015-03-18 16:44:00

标签: powershell startup

用这个抓我的头。对Powershell也很新。

目标:机器启动时,Powershell Script会启动并询问计算机名称,然后将其添加到域中,进行清理并重新启动计算机。

这是我的剧本:

$getName = Read-Host -Prompt "Enter the new name for this computer"
$user = "mdt_join"
$password = Read-Host -Prompt "Enter password for $user" -AsSecureString
$username = "bc\mdt_join"
$credential = New-Object System.Management.Automation.PSCredential($username,$password)

Add-Computer -NewName $getName -DomainName DOMAIN -OUPath "OU=Managed Stations,DC=DC,DC=DC,DC=DC" -Credential $credential -restart

Rename-Computer –NewName $getName

Remove-Item C:\Users\ladmin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\startup.cmd

Remove-Item $MyINvocation.InvocationName

如果我手动运行此脚本,但是当我使用此startup.cmd

时,此脚本有效
REM   Attempt to set the execution policy by using PowerShell version 2.0 syntax.
PowerShell -Version 2.0 -ExecutionPolicy Unrestricted .\script1.ps1 >> "%TEMP%\StartupLog.txt" 2>&1

IF %ERRORLEVEL% EQU -393216 (
   REM   PowerShell version 2.0 isn't available. Set the execution policy by using the PowerShell version 1.0 calling method.

   PowerShell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
   PowerShell .\startup.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
)

REM   If an error occurred, return the errorlevel.
EXIT /B %errorlevel%

我没有得到相同的结果。它只是回到了PS C:>位。我需要startup.cmd以不受限制的方式运行它。

有人可以看看这个,看看我哪里出错了吗?和我一起轻松 - 我昨天才开始涉足PowerShell。

4 个答案:

答案 0 :(得分:0)

嗯,这就像在调用powershell

时添加一些开关一样简单

Powershell -noninteractive -nologo .\startup.ps1

此外,.\startup.ps1假设脚本位于PowerShell启动的目录中(猜测C :),为了安全起见CD到脚本位置,或者只是使用完整路径即。 Powershell -noninteractive -nologo C:\Scripts\startup.ps1

答案 1 :(得分:0)

我没有对你的代码做过多少测试,但是根据我对powershell执行策略的了解,它是为了防止它被脚本更改(因此目的)。话虽这么说,我假设这是在一台新建的计算机上运行,​​在这种情况下,你需要找到另一种修改执行策略的方法(注册表,本地GPO等)。

答案 2 :(得分:0)

您可以创建一个powershell配置文件脚本,每次执行powershell时都会执行该脚本。我找到了这个链接; http://www.computerperformance.co.uk/powershell/powershell_profile_ps1.htm,它告诉您如何创建和管理PS配置文件脚本。

在脚本中,您可以附加启动脚本并将脚本分配给变量名,以便它们在命令提示符中与环境变量的行为相同。

因此,在您的情况下,只需将脚本添加到配置文件脚本的开头,以便在PowerShell启动时执行该脚本。

答案 3 :(得分:0)

执行下面的PowerShell命令,以在用户登录时通过任务计划程序运行PowerShell脚本 .ps1

Register-ScheduledTask -TaskName "TASKNAME" -Trigger (New-ScheduledTaskTrigger -AtLogon) -Action (New-ScheduledTaskAction -Execute "${Env:WinDir}\System32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-WindowStyle Hidden -Command `"& 'C:\PATH\TO\FILE.ps1'`"") -RunLevel Highest -Force;

-AtLogOn -表示触发器在用户登录时启动任务。

-AtStartup -表示触发器在系统启动时启动任务。

-WindowStyle Hidden -启动时不显示PowerShell窗口。 如果不需要,请删除。

-RunLevel Highest -以管理员身份运行PowerShell。 如果不需要,请删除。

PS

如有必要,请执行以下PowerShell命令以启用PowerShell脚本执行。

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Unrestricted -Force;

Bypass -没有阻止,也没有警告或提示。

Unrestricted -加载所有配置文件并运行所有脚本。如果您运行从互联网下载的未签名脚本,则会在运行之前提示您获得许可。