我希望在 Active Directory 的某个地方写入/存储“最后一次从 [计算机] 登录”,或者有一个我可以解析的日志?
想知道最后登录的 PC 的目的是通过网络提供远程支持 - 我们的用户很少四处走动,但我想知道我正在咨询的任何内容都在那天早上更新(当他们登录时) ,大概)至少。
我也在考虑将用户名和计算机名写入我可以参考的已知位置的登录脚本,但我们的一些用户不喜欢一次注销 15 天。
如果有一个使用登录脚本的优雅解决方案,一定要提到它——但如果它恰好适用于解锁站,那就更好了!
security remote-access logon-scripts active-directory user-management
我正在运行Windows 7安装,我希望能够在没有用户登录的情况下运行应用程序。 原因是我的应用程序是一个监控工具,我们希望能够24/7全天候监控即使计算机重新启动。根据我在网上收集的信息,有两种方法可以做到这一点:
创建一个服务并在管理员帐户下运行它
使用Windows组策略设置登录脚本:这就是事情变得有点不清楚,因为人们似乎混淆在没有用户的后台运行的程序在登录时运行的程序只是在用户登录后,如果我的设置。我的程序在这种模式下运行,如果没有人登录它会运行吗?
你能评论#1、#2,你会推荐哪一个,为什么?也许还有另一种我不知道的方式?
感谢您的帮助,
我知道有GPO设置“计算机配置 => 管理。模板 => 系统 => 脚本 => 同步运行登录脚本”。但是,这可确保登录脚本在 Windows 资源管理器开始加载(启用时)之前运行。
我需要相反的东西。我想确保 explorer.exe 已成功加载并随后执行 PowerShell 登录脚本。这是由于我需要触发的应用程序的一些奇怪的依赖关系。
我尝试禁用根据描述应该允许同时运行文件资源管理器和脚本的设置。不幸的是,它没有(是的,我重新启动和 gpupdates ......)
所以我尝试在我的 PowerShell 登录脚本中添加一个名为 wait-for-explorer() 的函数。它会while循环休眠,直到 explorer.exe 运行。但是,这似乎不起作用。
解决这个问题的最好和最干净的方法是什么?是否有我忽略的 GPO 设置?
这是代码的样子:
Function Wait-For-Explorer
{
$process = 'explorer.exe'
$waitTime = 1
While ($owner.User -ne $env:USERNAME)
{
try
{
$owner = (Get-WmiObject -class win32_process | where { $_.ProcessName -eq $process }).GetOwner() | Select -Property User
}
catch
{
Write-Host "Zzzzz...."
Start-Sleep -Seconds $waitTime
}
}
Write-Host "Process ${process} is …Run Code Online (Sandbox Code Playgroud) 我想请大家谈谈在映射共享和打印机时使用 GPO 还是登录脚本更好。
根据我的理解,如果我错了,请告诉我,GPO 似乎是一个更简洁的解决方案。
请张贴您在登录脚本中使用的有用命令。
以下是我使用的一些:
映射网络驱动器:
net use v:\fileserver\apps
映射网络打印机:
RunDll32.EXE printui.dll,PrintUIEntry /in /n "\\printserver\Xerox DC1100 PCL"
删除网络打印机:
RunDll32.EXE printui.dll ,PrintUIEntry /dn /q /n "\\printserver\HP LaserJet 2300"
disable windows firewall:
netsh firewall set opmode disable
install a new program:
if not exist "C:\Program Files\Antivirus\" "V:\Antivirus\ install.msi”
在用户桌面上创建快捷方式:
复制“V:\shortcuts\dictionary.lnk”“%USERPROFILE%\Desktop”
我的网络上混合了 Win7 和 XP 计算机。每个用户都使用基于 VBS 的登录脚本登录,对于支持它的客户端,我想显示一个信息弹出窗口,如下所示。
如何检测是否使用 VBScript 安装了 Powershell?
我在活动目录中定义了几个用户登录脚本。这些是批处理脚本以及 powershell 脚本。
这些实际上什么时候运行?用户在登录时看到“黑色终端框”,还是在看到登录屏幕时运行脚本?
编辑澄清:我说的是在 GPO 中定义的登录脚本,我正在运行 Windows Server 2008 R2。
作为我为客户处理的任务的一部分,我需要对企业登录脚本进行一些修改。Windows 命令行绝对不是我的专业领域,但我对大多数它都做得很好。但是,我有一个问题,我不知道该怎么做。
基本上,我需要将机器默认网关的 IP 地址获取到环境变量中(供以后在脚本中使用)。我知道它存在于ipconfig和 of的输出中tracert,并且我知道如何在他们的输出中找到我需要的确切行,但我不知道如何超越它。
例如,以下命令会产生如下输出:
>ipconfig|Find "Default Gateway"|Findstr/N "."|Findstr/B "1:"
1: Default Gateway . . . . . . . . . : 199.99.9.1
Run Code Online (Sandbox Code Playgroud)
但是现在我需要以某种方式仅从该文本行中提取 IP 地址,然后将其分配给环境变量。那么,如何从 Windows 命令行执行此操作?(Windows XP 及更高版本)。
scripting windows logon-scripts command-line-interface environment-variables
我正在寻找一种方式来运行的脚本1,当用户登录2 和,当他们注销3他们对4级的Windows 5机。
笔记:
我正在使用登录批处理脚本将一些 dll 文件复制到 c:\windows\system32 文件夹中,并使用 regsrv32 命令注册它们。
但是,这两个操作都失败了。
我在这里应用脚本: user configuration\policies\scripts (logon/logoff)/logon
脚本本身确实会被执行。但是,它只是不执行任何需要管理员凭据的操作。
我怎样才能解决这个问题?
我在 PowerShell 中编写了一个登录脚本。该脚本嵌入在 GPO 中,并在用户登录域时运行。
我的问题是,我在脚本中部署的驱动器没有被部署。我确信登录脚本会运行,因为在脚本结束时我会向自己发送一封电子邮件,但我总是会收到它。所以运行脚本应该不是问题。$Error每次脚本运行时,我都会记录整个变量,但没有说明为什么会发生此错误。
我几乎可以肯定错误不在脚本本身中 - 我认为它必须是权限错误。
我认为当我-NoProfile在运行脚本时指定参数时可以解决这个问题,但我不知道将它放在 GPO 的哪个位置。由于美观原因,我不希望批处理文件调用脚本:-)。
编辑:指定-noprofile没有解决问题
编辑:由于有评论说没有足够的关于驱动器如何映射的信息,我将整个映射部分粘贴在下面:
# UserOU as a parameter, value set in GPO
Param([string]$UserOU)
# preparing some stuff...
Import-Module .\SecureStringFunctions.psm1
[Byte[]]$key = (1..16)
$pw = Get-Content .\LocalAdminCred.txt | ConvertTo-SecureString -key $key
# Tried this to elevate the Script IF it's needed. Didn't solve my problem. works only on PS 4.0 but didn't solve the issue on my 5.0 machine
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{ Start-Process …Run Code Online (Sandbox Code Playgroud) 有人可以提供一些有关 VBS 脚本的帮助吗?
这是我到目前为止修改的内容;
Const GROUP1 = "cn=GROUP1"
Const GROUP2 = "cn=GROUP2"
Const GROUP3 = "cn=GROUP3"
Set wshNetwork = CreateObject("WScript.Network")
Set ObjectUser = CreateObject("ADSystemInfo")
Set CurrentUser = GetObject("LDAP://" & ObjectUser.UserName)
strGroups = LCase(Join(CurrentUser.MemberOf))
If InStr(strGroups, LCase("GROUP1")) Then
wshNetwork.MapNetworkDrive "L:", "\\servername\\volume1\"
End If
If InStr(strGroups, LCase("GROUP2")) Then
wshNetwork.MapNetworkDrive "M:", "\\servername\volume2\"
End If
If InStr(strGroups, LCase("GROUP3")) Then
wshNetwork.MapNetworkDrive "N:", "\\servername\volume3\"
End If
Run Code Online (Sandbox Code Playgroud)
我不确定检索 LDAP 字符串的最佳和最简单的方法是什么?我也不断收到错误Set CurrentUser = GetObject("LDAP://" & ObjectUser.UserName)。
任何帮助将非常感激。
logon-scripts ×13
powershell ×6
group-policy ×4
windows ×4
vbscript ×3
scripting ×2
autorun ×1
batch-file ×1
login ×1
netlogon ×1
security ×1
service ×1
windows-7 ×1