windows.关于设置脚本的一些基本方法原则

提问:“看了这么多高手的帖子,却没有找到一个非常简单的问题的答案:
即如何为一个域用户设置登陆脚本?
- BAT可否作为登陆脚本?
- 在域用户“属性”中,应如何指定登陆脚本名?"D:\x.bat"还是"\\srv\x.bat"?还是其它?
- 脚本应该放在何处?
- 还有没有其它要注意的问题?”

(参加原帖热烈的讨论 http://www.winmag.com.cn/forum/itemdisplay.asp?boardid=24&id=393362

回答:

1、bat可以作为登陆脚本执行,确切说一切可以在windows平台执行的东西都可以作为登陆脚本来用。
2、应该指定以\\server\……这样格式开头的路径。因为client在登陆的时候执行脚本,其实是从服务器上下载到本地,然后执行。这样的话,如果指定c:\这样的路径,client只会在本地的c盘查找,而不是到server上的路径去查找。
3、脚本可以放在一切client能够读取的位置。通常这个位置处于\\server\netlogon的share下(在服务器上的位置是%systemroot%\sysvol\sysvol\domainname\scripts),但是如果你制订了策略,那么脚本默认的存放路径应该在%systemroot%\sysvol\sysvol\domainname\policies\guid\user(machine)\scripts下,如果你放在别的位置,需要在脚本执行栏的位置输入绝对路径,格式同样需要以\\server\……开头。
4、其他的问题也很多了,一般来说就是脚本适用于策略的时候,客户端可能会执行不到。
一般来说可能会有一下的几个原因:
a、脚本从名称到内容都尽可能的不要用特殊字符、长文件名(超过8个字符)、空格,比如&等。这样的脚本在不同的os上可能执行会有问题。

b、脚本存放的位置和路径,请遵照上面的原则来做。

c、脚本的编写方面。特别是适用net use 来map一个fileserver上的路径。有可能在登陆之前,client上已经有网络盘的映射,如果恰好和你map的盘符一样,将有可能导致脚本执行失败,你可以在脚本的最前面加一句net use * /d /y来解决这个问题。
不过这个命令要慎用,在实际生产环境中,如果你的fileserver是非wintel平台的storage,响应时间较长,那么可能导致用户重新登陆时,无法连接fileserver上的sharefolder,可以用一句if exist来判断网络盘是否存在。
另外一个方面,如果远程设备是一些跨平台的存储设备,比如一些nas、san等,map到windows平台的时候可能会提示“网络路径无法连接”等问题,可以相互更换map \\server_netbios_name或者map \\server_ipaddress两种方式来尝试连接。
如果遇到权限问题,那么按照共享权限和安全权限冲突时取最小值的原则,一般来讲可以将共享权限设置为full control,然后安全权限做严格设定的办法来解决。

d、“配置文件路经”和“登陆脚本路径”、“主文件夹”

朋友们在初次设置域账户脚本的时候,可能对于这三个概念有些模糊,难以区分,这里说明一下:

①使用组策略,在用户登录脚本的的地方编辑一个cmd等,使用诸如net use的方式就可以map一个网络盘符了。
②“配制文件路径”是指用户profile所处的位置,通常在%userprofile%
“登录脚本路径”是指用户登录到服务器时,执行的脚本所处的位置,通常默认路径位于
服务器上的netlogon下,如果制定策略中使用脚本,默认的路径应该在gpo 的guid下的user或者computer下的scripts,如果置于其他位置,需要手动指定完全路径。
③“主文件夹”是指用户在fileserver上的个人主目录,这个概念没有绝对的位置。需要你手动指定路径,不过在这里写入和在脚本中写入的不同,在于系统会根据你写入的路径,自动创建文件夹,并为该用户分配权限,该文件夹的owner属于该用户。这里可以使用%username%的变量,让系统自行完成。当然在指定了 主目录后,你仍然可以访问其他有权限使用的资源。

e、关于策略的执行顺序是本机、站点、域、ou、子ou。如果有设置上的重复,按照执行的顺序,后面的设置将会覆盖前面的设置。
如果在ou上设置“block policy inheritance”,那么上层的策略将不会在这一层获得执行。
如果在ou上设置“No override”,那么这一层将不会被后面的策略设置覆盖,也就是说即使后面有相同的设置,仍然以这一层的设置为准。
如果在ou上设置“disabled”,那么这个策略将会被禁止执行。

如果在策略的properties  security上取消了对应的组的read和apply group policy,那么对应的组将会无法应用到策略。通常默认被应用的组有authenticated user。
如果你取消了该组的两个权限,然后add其他组,同样赋予read和apply group policy的话,此策略将只会被该组执行到,这也就是所谓的filter。

如果你的域中有多台dc,可能需要在dssite.msc中手动同步它们。
你也可以在服务器上使用secedit /refreshpolicy user_policy(machine_policy) /enforce 来强制刷新策略
这样的办法同样适用于client。

f、执行的脚本,可以放在computer configuration和user configuration中执行。
对于user,通常可以放置更改用户属性的东西。
对于computer,通常可以放置更改计算机属性的东西。
这两个没有绝对界限,但通常登陆的时候,都属于domain users成员,这样如果需要更改注册表或系统文件之类的,可能会遇到权限问题,那么我们也可以把这样的脚本放在computer中,这样可以在user登陆之前获得执行。
(这里顺带说一句:大家很少用到计算机账户吧,那么计算机账户的作用在这里可以得到体现,由于此时还没有用户账户验证,计算机账户和dc的验证有一方面来源于本地计算机账户和dc之间保持一个密码同步,以便于在这种特殊的情况下获得验证,该密码默认30天变更一次。
你甚至可以在sharefolder上添加计算机账户的权限:)如果由于dns对应或者其他的一些原因,导致这个密码无法同步,dc将会无法验证该计算机账户,这可能会导致计算机登陆脚本无法执行。在dc的日志上一般都会给出一个错误提示,ComputerNetbiosName$无法存取。解决的办法,可以通过在客户端上执行netdom重置该信任关系,这是另话了。)
对于user的设定,只需要登出然后登入即可获得脚本的应用。
对于computer的设定,则需要重新启动机器来获得脚本的执行。

注:从上面的几点中,大家可以看到计算机在登陆的时候需要通过dns来定位dc,从而定位
定位gpo,sysvol(策略、脚本、管理模板都存放在这里),dns对于ad的设置是至关重要
的,一般来说可以这样设置,将客户端的dns指向dc(如果dc上是双网卡的话,那么指向内部
网卡dns),然后在dc上设置转发,forward到外部(isp)dns。

上面只是就一些常见的问题做简要介绍,如果遇到更为复杂的问题,就需要查阅其他资料来解决了。

关于大家平时遇到的问题,都整理成faq放在下面

FAQ:

★看了你给的配置过程链接:http://www.winmag.com.cn/forum/itemdisplay.asp?boardid=24&id=393362但运行还是出错?
我的配置过程如下:
1、制作脚本文件config.bat并拷贝至域控制器服务器下的sysvol\sysvol\scripts目录下
   该脚本文件用 net use z: \\linux_file\share 命令
2、配置“配制文件路径”:路径指向:\\nwf_sav(域控制服务器名)\netlogon
   配置“登录脚本路径”: config.bat
3、在客户机注销重新登陆时出现以下窗口:但未能将共享文件夹映射为Z盘。

(参与原帖热烈的讨论 http://www.winmag.com.cn/forum/itemdisplay.asp?boardid=24&id=509835

回答:一般脚本的存放位置有两种观点:
1、将登陆脚本放在\\server\netlogon下(在dc上的物理路径是 %systemroot%\SYSVOL\sysvol\domainname\SCRIPTS ,而不是 sysvol\sysvol\scripts)
在设置账户属性中登陆指令档的时候,此时是登陆域的时候默认寻找登陆脚本的位置
如果需要修改该脚本,需要手动定位到上面的路径,
优点是脚本集中放置

2、将登陆脚本放在策略gpo所处的路径下(在dc上的物理路径类似于这样
\\domainname\SysVol\domainname\Policies\{142B4268-9574-471F-9F7F-9AA04836F57F}\User\Scripts\Logon,这里一长串的数字是gpo的guid,用来唯一的标识这个对象,
可以通过查询该策略的属性,来察看该guid)
在设置策略中登入指令档的时候,此时是登陆域的时候默认寻找登陆脚本的位置
如果需要修改该脚本,可以点击下方的“显示档案”
优点是和策略关联性强,编辑查找方便

无论用哪种方法,如果脚本放置在默认的查询路径,指定登陆档的时候就不用写路径
如果不是,就需要填写完整路径,当然这个路径需要对于client可用,也就是说
不能填写诸如 c:\winnt\sysvol\sysvol 这样的路径,否则client在登陆的时候,只会
在自己的机器上 c:\winnt\sysvol\sysvol 查找脚本,显然是找不到的,因为脚本
是下载到本地执行的。

那么我们先看看脚本是否能够在client上正确执行,
在client上 winkey+r,然后填入脚本的路径,比如 \\servername\netlogon\config.bat
执行一下,是否能够等到正确的结果?

然后察看上面的位置中指定的路径是否正确

如果是通过策略指定的登陆脚本,我们再用 gpresult /v ,察看一下client是否应用到了
您制定的策略,如果没有就要考虑使用 dssite.msc 手动同步域中的所有dc,然后
secedit /refreshpolicy user_policy (machine_policy)/enforce 强制刷新策略,
然后client重新登陆或者重新启动一下(这取决于您制订的是用户登陆脚本还是计算机登陆脚本)

如果还是不行,那么在早先的那篇文章有提到,
有可能是由于本地已经map 了同样盘符的盘,导致冲突
有可能是由于map的共享路径权限设置错误,常见的是共享权限的设置问题
有可能是由于map的共享是跨平台的存储设备或者格式,它们可能不能在登陆时在系统要求的
时间内响应,这导致系统认为该资源超时连接,不可用。您可以尝试更换netbios名称或者ip
看看是否有所改善。

如果您还有问题,欢迎您继续讨论!
这个faq,我将同步更新在 
http://www.winmag.com.cn/forum/itemdisplay.asp?boardid=24&id=393362

同时,您也可以参考 《HOW TO:在 Windows 2000 中分配脚本》http://support.microsoft.com/kb/322241/zh-cn

(0)

相关推荐

  • 一张表格告诉你windows.onload()与$(document).ready()的区别

    浏览器加载完DOM后,会通过javascript为DOM元素添加事件,在javascript中,通常使用window.onload()方法. 在jquery中,则使用$(document).ready()方法.下面介绍一下两者的区别.   window.onload() $(document).ready() 执行时机 在页面所有元素(包括图片,引用文件)加载完后执行. 页面中所有HTML DOM,CSS DOM结构加载完之后就会执行,其他图片可能没有加载完. 如果想要网页所有内容(包括图片等)

  • 浅谈window对象的scrollBy()方法

    scrollBy()方法的定义和用法: 此方法可以把内容移动指定尺寸.单位是像素(px). 点击可参阅更多window对象的属性和方法. 语法结构: scrollBy(x,y) 参数列表: 参数 列表 x 必需.内容向右移动的尺寸. y 必需.内容向下移动的尺寸. 浏览器支持: 1.IE浏览器支持此属性. 2.Firefox浏览器支持此属性. 3.Opera浏览器支持此属性. 4.chrome浏览器支持此属性. 代码实例: <!DOCTYPE html> <html> <he

  • JS 中document.URL 和 windows.location.href 的区别

    document 表示的是一个文档对象,windows 表示一个窗口对象. 一个窗口下面可以有很多的document对象.每个document 都有 一个URL. 但是,这不是所有的区别.当你ctrl + F5 一个链接 http://www.jb51.net/#server 打印 alert(document.URL ); 和 alert(windows.location.href); 发现,这两个的值不一样, document.URL : http://www.jb51.net/ windo

  • windows.vbs.FSO.文件操作信息.磁盘驱动信息.文件夹操作信息全集

    源址: http://www.zhouguoqing.com.cn/article.asp?id=50 ' FSO 文件操作相关 ' FSO 参数详解: ' Fso.IsRootFolder=True|False  '是否为根目录 ' Fso.GetFolder    '读取文件夹  用法:Set fldr = fso.GetFolder("C:\\目录2") ' Fso.FolderExists=True|False  '查找此文件夹是否存在 ' Fso.CreateFolder  

  • Jqyery中同等与js中windows.onload的应用

    复制代码 代码如下: $(function(){//脚本}) Jquery(function(){//脚本}) Jquery(document).ready(function(){//脚本}) 以上三个代码执行同一个动作,由于书写方便,所以Jquery比其他应用程序更受欢迎,但是当与其他js程序库一起使用的时候,特别是prototype.js同时使用时,不能使用$方法,因为他们也有该方法,可以用如下方法回避这种冲突: jQuery(function($){//脚本}) 他们都是当Dom加载完后执

  • 将c:\windows.复制到当前目录并显示进度的批处理文件

    复制代码 代码如下: @echo off setlocal enabledelayedexpansion set b=/-\ /-\ ** set 速度=1 set 退格= set n=0 for %%i in (%SystemRoot%\*.*) do (call :a !n!&copy %%i>nul 2>nul&set /a n+=1) goto :eof :a set/a a=%1%%10 set/a c=%a%%%4 if %a% EQU 0 set/p=▌<n

  • 用Jquery重写windows.alert方法实现思路

    已经在 IE8 , firefox3.0.11下面测试通过 复制代码 代码如下: $.extend({ includePath: '', include: function(file) { var files = typeof file == "string" ? [file] : file; for (var i = 0; i < files.length; i++) { var name = files[i].replace(/^\s|\s$/g, "")

  • windows.关于设置脚本的一些基本方法原则

    提问:"看了这么多高手的帖子,却没有找到一个非常简单的问题的答案:即如何为一个域用户设置登陆脚本?- BAT可否作为登陆脚本?- 在域用户"属性"中,应如何指定登陆脚本名?"D:\x.bat"还是"\\srv\x.bat"?还是其它?- 脚本应该放在何处?- 还有没有其它要注意的问题?" (参加原帖热烈的讨论 http://www.winmag.com.cn/forum/itemdisplay.asp?boardid=24&a

  • 分别在Linux和Windows下设置JVM内存的简单方法

    Linux服务器: 在/usr/local/apache-tomcat-5.5.23/bin 目录下的catalina.sh 添加:JAVA_OPTS='-Xms512m -Xmx1024m' 或者 JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m" 或者 CATALINA_OPTS="-server -Xms256m -Xmx300m" Windows服务器: 在/apache-tomcat-5.5.

  • Windows系统配置python脚本开机启动的3种方法分享

    测试环境:windows Server 2003 R2 一.开始菜单启动项实现 用户必须登录才可执行. 测试脚本(python代码): 复制代码 代码如下: import time fout = open('e:\\1.txt','w') while True:     tmp = '%d-%02d-%02d %02d:%02d:%02d \r\n' % time.localtime()[0:6]     print tmp     fout.write(tmp)     fout.flush(

  • Linux Windows下设置定时执行任务的方法

    本篇主要介绍如何在Linux和Windows上分别创建定时执行任务. Linux篇 Linux下创建定时执行任务可使用crontab,系统默认自带crontab,在Ubuntu 16.04下进行演示说明. 1.crontab 基本使用 #/etc/init.d/cron status # 查看状态 #/etc/init.d/cron start # 启动crontab服务 #/etc/init.d/cron stop # 停止crontab服务 #/etc/init.d/cron reload

  • 使用Windows批处理和WMI设置Python的环境变量方法

    大概在Python2.7.xx以前,安装Python时环境变量是需要自己设的,所以自己做了一个批处理文件.bat来设置环境变量Path,通过WMI命令wmic来实现. ::检查path中有没有相关路径 echo %path%|findstr /i "c:\python27\scripts"&&(goto run) ::先添加,防止没有时修改出错 wmic ENVIRONMENT create name="path",VariableValue=&qu

  • 实现Windows下设置定时任务来运行python脚本

    1. 自己用python写了一个签到脚本 经过测试已经可以成功打卡,于是研究了一下windows定时运行程序 2. 创建定时任务 2.1 打开"控制面板 "–>"系统和安全"–>"管理工具"–>"计划任务" 如图 2.2 打开"计划任务",如图,点击"创建基本任务" 2.3 给定时任务命名,点击下一步 2.4 选择脚本执行的时间,以每天执行为例,如图,点击下一步 2.5

  • Windows下通过bat获取网络连线实际名称,加强IP类设置脚本的兼容性

    其中比较难解决的问题就是获取网络连线的实际名称,大部分人使用的IP设置脚本都是将[本地连接]写死在代码中,可实际上并不是所有电脑都叫本地连接:比如有的用户电脑可能升级了网卡驱动,或者更换了网卡,导致网络连线的名称变成"本地连接2",又比如有无聊好事者(某产线的作业员电脑),将网络连线的名称各种DIY,我就见过一个修改成"操蛋的青春",瞬间无语! 好了,废话不多说,直接上菜! 对于网络连线的实际名称,可能出现的情况有: 1.网卡更换/驱动升级导致名称变更,比如本地连接

  • windows server设置FTP域用户隔离的方法

    本文为大家分享了windows server设置FTP域用户隔离的具体步骤,供大家参考,具体内容如下 一.实验环境 三台设备 2012 域控制器 ip 192.168.10.101 2008r2 FTP服务器 ip 192.168.10.104 win10 客户机 ip 192.168.10.107 实验说明 1.将FTP服务器加入域控制器中,其完全域名为ftp.2021skills. com 2.建立ftp 站点ftp.2021kils.com站点主目录为 C:\ftp,不允许匿名登录,所有用

  • 在Windows中设置Python环境变量的实例讲解

    在 Windows 设置环境变量 在环境变量中添加Python目录: 在命令提示框中(cmd) : 输入 path=%path%;C:\Python 按下"Enter". 注意: C:\Python 是Python的安装目录. 也可以通过以下方式设置: • 右键点击"计算机",然后点击"属性" • 然后点击"高级系统设置" • 选择"系统变量"窗口下面的"Path",双击即可! • 然后

  • linux 远程控制windows系统下的程序(三种方法)

    有时候我们需要通过在linux上远程运行windows系统上的程序. 方法一: 通过python中的 winrm模块,前提条件,先提前设置好winrm服务.如何设置请自行百度,winRM服务是windows server下PowerShell的远程管理服务.Python脚本通过连接winRM模块操作windows命令行. import winrm def cmd_views(ip,cmd_comand): win = winrm.Session('http://'+ip+':5985/wsman

随机推荐