Explore Your World

This week’s Windows Tip Sheet column is about opening an Explorer window from the command prompt. One of my readers sent me an email about using this tip in Vista:

I’m currently running Vista and when I type “explorer.exe /e, %cd%” I get the same results as “explorer.exe /e /root, %cd%”.  So is /root really necessary?  Wouldn’t it be faster to remove it if you get the same results?

He’s right in that you essentially end up with an Explorer window opened to the current directory. But there is a subtle difference that might matter to you. When you use /root, you should see that folder tree in the left hand pane is “rooted” to the specified folder. When you do it without /root, the folder tree is the full tree showing your computer, network places and the rest.

On my Vista Ultimate laptop, I didn’t really notice any performance difference between using /root or not. It would save you from typing a bit, but I use a batch file anyway.

It boils down to how you intend to use the Explorer window.  If you want to easily navigate away from the current folder, then don’t use /root. The command is flexible so do what works for you.

Technorati Tags: , , ,

Revisit an old friend

I have a new blog at the SAPIEN blog that is a visit to an old friend, DosKey. Now, before you dismiss this as old-fashioned, take a moment to read the article and try it out. If you spend a lot of time at a command prompt, DosKey can make you more efficient. You can even use it to execute PowerShell expressions and commands. If you are a fan of one-liners, then associating them with a DosKey macro makes a lot of sense. Let me know what you think.

Technorati Tags:

Batch File Logs

I’ve always liked creating audit logs in my VBScript work, but could never figure out how to create a nicely formatted log from a batch file. Now I have. See http://sapien.eponym.com/blog/_archives/2006/11/20/2513469.html for the details.

Technorati Tags:

More One Liners

I recently did a TipSheet column listing some of my favorite quick, one line commands. Reader Wayne was kind enough to share with me his list of oft-used one-liners which he graciously offered to share. I have not tested many of these personally, but you always test things in a non-production environment anyway, right? The command entry should all be on one line. I’ve wrapped lines just to get everything displayed in the post.
FSMO Roles
ntdsutil roles Connections “Connect to server %logonserver%” Quit “select Operation Target” “List roles for conn server” Quit Quit Quit
[JDH: This is really a series of steps, not a single command
Domain Controllers
Nltest /dclist:%userdnsdomain%
Domain Controller IP Configuration
for /f %i in (‘dsquery server -domain %userdnsdomain% -o rdn’) do psexec \\%i ipconfig /all
Stale computer accounts
dsquery computer domainroot -stalepwd 180 -limit 0
Stale user accounts
dsquery user domainroot -stalepwd 180 -limit 0
Disabled user accounts
dsquery user domainroot -disabled -limit 0
AD Database disk usage
for /f %i in (‘dsquery server -domain %userdnsdomain% -o rdn’) do dir \\%i\admin$\ntds
Global Catalog Servers from DNS
dnscmd %logonserver% /enumrecords %userdnsdomain% _tcp | find /i “3268”
Global Catalog Servers from AD
dsquery * “CN=Configuration,DC=forestRootDomain” -filter “(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))”
Users with no logon script
dsquery * domainroot -filter “(&(objectCategory=Person)(objectClass=User)(!scriptPath=*))” -limit 0 -attr sAMAccountName sn givenName pwdLastSet distinguishedName
User accounts with no pwd required
dsquery * domainroot -filter “(&(objectCategory=Person)(objectClass=User)(userAccountControl:1.2.840.113556.1.4.803:=32))”
User accounts with no pwd expiry
dsquery * domainroot -filter “(&(objectCategory=Person)(objectClass=User)(userAccountControl:1.2.840.113556.1.4.803:=65536))”
User accounts that are disabled
dsquery * domainroot -filter “(&(objectCategory=Person)(objectClass=User)(userAccountControl:1.2.840.113556.1.4.803:=2))”
DNS Information
for /f %i in (‘dsquery server -domain %userdnsdomain% -o rdn’) do dnscmd %i /info
DNS Zone Detailed information
dnscmd /zoneinfo %userdnsdomain%
Garbage Collection and tombstone
dsquery * “cn=Directory Service,cn=Windows NT,cn=Services,cn=Configuration,DC=forestRootDomain” -attr garbageCollPeriod tombstoneLifetime
Netsh authorised DHCP Servers
netsh dhcp show server
DSQuery authorised DHCP Servers
Dsquery * “cn=NetServices,cn=Services,cn=Configuration, DC=forestRootDomain” -attr dhcpServers
DHCP server information
netsh dhcp server \\DHCP_SERVER show all
DHCP server dump
netsh dhcp server \\DHCP_SERVER dump
WINS serer information
Netsh wins server \\WINS_SERVER dump
Group Policy Verification Tool
gpotool.exe /checkacl /verbose
AD OU membership
dsquery computer -limit 0
AD OU membership
dsquery user -limit 0
List Service Principal Names
for /f %i in (‘dsquery server -domain %userdnsdomain% -o rdn’) do setspn -L %i
Compare DC Replica Object Count
dsastat –s:DC1;DC2;… –b:Domain –gcattrs:objectclass –p:999
Check AD ACLs
acldiag dc=domainTree
NTFRS Replica Sets
for /f %i in (‘dsquery server -domain %userdnsdomain% -o rdn’) do ntfrsutl sets %i
for /f %i in (‘dsquery server -domain %userdnsdomain% -o rdn’) do ntfrsutl ds %i
Domain Controllers per site
Dsquery * “CN=Sites,CN=Configuration,DC=forestRootDomain” -filter (objectCategory=Server)
DNS Zones in AD
for /f %i in (‘dsquery server -o rdn’) do Dsquery * -s %i domainroot -filter (objectCategory=dnsZone)
Enumerate DNS Server Zones
for /f %i in (‘dsquery server -o rdn’) do dnscmd %i /enumzones
Subnet information
Dsquery subnet –limit 0
List Organisational Units
Dsquery OU
ACL on all OUs
For /f “delims=|” %i in (‘dsquery OU’) do acldiag %i
Domain Trusts
nltest /domain_trusts /v
Print DNS Zones
dnscmd DNSServer /zoneprint DNSZone
Active DHCP leases
For /f %i in (DHCPServers.txt) do for /f “delims=- ” %j in (‘”netsh dhcp server \\%i show scope | find /i “active””‘) do netsh dhcp server \\%i scope %j show clientsv5
DHCP Server Active Scope Info
For /f %i in (DHCPServers.txt) do netsh dhcp server \\%i show scope | find /i “active”
Resolve DHCP clients hostnames
for /f “tokens=1,2,3 delims=,” %i in (Output from ‘Find Subnets from DHCP clients’) do @for /f “tokens=2 delims=: ” %m in (‘”nslookup %j | find /i “Name:””‘) do echo %m,%j,%k,%i
Find two online PCs per subnet
Echo. > TwoClientsPerSubnet.txt & for /f “tokens=1,2,3,4 delims=, ” %i in (‘”find /i “pc” ‘Output from Resolve DHCP clients hostnames'”‘) do for /f “tokens=3 skip=1 delims=: ” %m in (‘”Find /i /c “%l” TwoClientsPerSubnet.txt”‘) do If %m LEQ 1 for /f %p in (‘”ping -n 1 %i | find /i /c “(0% loss””‘) do If %p==1 Echo %i,%j,%k,%l
AD Subnet and Site Information
dsquery * “CN=Subnets,CN=Sites,CN=Configuration,DC=forestRootDomain” -attr cn siteObject description location
AD Site Information
dsquery * “CN=Sites,CN=Configuration,DC=forestRootDomain” -attr cn description location -filter (objectClass=site)
Printer Queue Objects in AD
dsquery * domainroot -filter “(objectCategory=printQueue)” -limit 0
Group Membership with user details
dsget group “groupDN” -members | dsget user -samid -fn -mi -ln -display -empid -desc -office -tel -email -title -dept -mgr
Total DHCP Scopes
find /i “subnet” “Output from DHCP server information” | find /i “subnet”
Site Links and Cost
dsquery * “CN=Sites,CN=Configuration,DC=forestRootDomain” -attr cn cost description replInterval siteList -filter (objectClass=siteLink)
Time gpresult
timethis gpresult /v
Check time against Domain
w32tm /monitor /computers:ForestRootPDC
Domain Controller Diagnostics
dcdiag /s:%logonserver% /v /e /c
Domain Replication Bridgeheads
repadmin /bridgeheads
Replication Failures from KCC
repadmin /failcache
Inter-site Topology servers per site
Repadmin /istg * /verbose
Replication latency
repadmin /latency /verbose
Queued replication requests
repadmin /queue *
Show connections for a DC
repadmin /showconn *
Replication summary
Repadmin /replsummary
Show replication partners
repadmin /showrepl * /all
All DCs in the forest
repadmin /viewlist *
ISTG from AD attributes
dsquery * “CN=NTDS Site Settings,CN=siteName,CN=Sites,CN=Configuration,DC=forestRootDomain” -attr interSiteTopologyGenerator
Return the object if KCC Intra/Inter site is disabled for each site
Dsquery site | dsquery * -attr * -filter “(|(Options:1.2.840.113556.1.4.803:=1)(Options:1.2.840.113556.1.4.803:=16))”
Find all connection objects
dsquery * forestRoot -filter (objectCategory=nTDSConnection) –attr distinguishedName fromServer whenCreated displayName
Find all connection schedules
adfind -b “cn=Configuration,dc=qraps,dc=com,dc=au” -f “objectcategory=ntdsConnection” cn Schedule -csv
Software Information for each server
for /f %i in (Output from ‘Domain Controllers’) do psinfo \\%i & filever \\%i\admin$\explorer.exe \\%i\admin$\system32\vbscript.dll \\%i\admin$\system32\kernel32.dll \\%i\admin$\system32\wbem\winmgmt.exe \\%i\admin$\system32\oleaut32.dll
Check Terminal Services Delete Temp on Exit flag
For /f %i in (Output from ‘Domain Controllers’) do Reg query “\\%i\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server” /v DeleteTempDirsOnExit
For each XP workstation, query the current site and what Group Policy info
@dsquery * domainroot -filter “(&(objectCategory=Computer)(operatingSystem=Windows XP Professional))” -limit 0 -attr cn > Workstations.txt & @For /f %i in (Workstations.txt) do @ping %i -n 1 >NUL & @if ErrorLevel 0 If NOT ErrorLevel 1 @Echo %i & for /f “tokens=3” %k in (‘”reg query “\\%i\hklm\software\microsoft\windows\currentversion\group policy\history” /v DCName | Find /i “DCName””‘) do @for /f %m in (‘”nltest /server:%i /dsgetsite | find /i /v “completed successfully””‘) do @echo %i,%k,%m
Information on existing GPOs
dsquery * “CN=Policies,CN=System,domainRoot” -filter “(objectCategory=groupPolicyContainer)” -attr displayName cn whenCreated gPCFileSysPath
Copy all Group Policy .pol files
for /f “tokens=1-8 delims=\” %i in (‘dir /b /s \\%userdnsdomain%\sysvol\%userdnsdomain%\policies\*.pol’) do @echo copy \\%i\%j\%k\%l\%m\%n\%o %m_%n.pol
Domain Controller Netlogon entries
for /f %i in (‘dsquery server /o rdn’) do echo %i & reg query \\%i\hklm\system\currentcontrolset\services\netlogon\parameters
WINS Statistics
for /f “tokens=1,2 delims=,” %i in (WINSServers.txt) do netsh wins server \\%i show statistics
WINS Record counts per server
for /f “tokens=1,2 delims=,” %i in (WINSServers.txt) do netsh wins server \\%i show reccount %i
WINS Server Information
for /f “tokens=2 delims=,” %i in (WINSServers.txt) do netsh wins server \\%i show info
WINS Server Dump
for /f “tokens=2 delims=,” %i in (WINSServers.txt) do netsh wins server \\%i dump
WINS Static Records per Server
netsh wins server \\LocalWINSServer show database servers={} rectype=1
Find policy display name given the GUID
dsquery * “CN=Policies,CN=System,DC=domainRoot” -filter (objectCategory=groupPolicyContainer) -attr Name displayName
Find empty groups
dsquery * -filter “&(objectCategory=group)(!member=*)” -limit 0 -attr whenCreated whenChanged groupType sAMAccountName distinguishedName memberOf
Find remote NIC bandwidth
wmic /node:%server% path Win32_PerfRawData_Tcpip_NetworkInterface GET Name,CurrentBandwidth
Find remote free physical memory
wmic /node:%Computer% path Win32_OperatingSystem GET FreePhysicalMemory
Find remote system information
SystemInfo /s %Computer%
Disk statistics, including the number of files on the filesystem
chkdsk /i /c
Query IIS web sites
iisweb /s %Server% /query “Default Web Site”
Check port state and connectivity
portqry -n %server% -e %endpoint% -v
Forest/Domain Functional Levels
ldifde -d cn=partitions,cn=configuration,dc=%domain% -r “(|(systemFlags=3)(systemFlags=-2147483648))” -l msds-behavior-version,dnsroot,ntmixeddomain,NetBIOSName -p subtree -f con
Forest/Domain Functional Levels
dsquery * cn=partitions,cn=configuration,dc=%domain% -filter “(|(systemFlags=3)(systemFlags=-2147483648))” -attr msDS-Behavior-Version Name dnsroot ntmixeddomain NetBIOSName
Find the parent of a process
wmic path Win32_Process WHERE Name=’notepad.exe’ GET Name,ParentProcessId
Lookup SRV records from DNS
nslookup -type=srv _ldap._tcp.dc._msdcs.{domainRoot}
Find when the AD was installed
dsquery * cn=configuration,DC=forestRootDomain -attr whencreated -scope base
Enumerate the trusts from the specified domain
dsquery * “CN=System,DC=domainRoot” -filter “(objectClass=trustedDomain)” -attr trustPartner flatName
Find a DC for each trusted domain
for /f “skip=1” %i in (‘”dsquery * CN=System,DC=domainRoot -filter (objectClass=trustedDomain) -attr trustPartner”‘) do nltest /dsgetdc:%i
Check the notification packages installed on all DCs
for /f %i in (‘dsquery server /o rdn’) do @for /f “tokens=4” %m in (‘”reg query \\%i\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa /v “Notification Packages” | find /i “Notification””‘) do @echo %i,%m
List ACLs in SDDL format
setacl -on %filepath% -ot file -actn list -lst f:sddl
Find out if a user account is currently enabled or disabled
dsquery user DC=%userdnsdomain:.=,DC=% -name %username% | dsget user -disabled -dn
Find servers in the domain
dsquery * domainroot -filter “(&(objectCategory=Computer)(objectClass=Computer)(operatingSystem=*Server*))” -limit 0
Open DS query window
rundll32 dsquery,OpenQueryWindow

Technorati Tags:
commandshell gpotool

Techmentor: FOR examples

The FOR command is one of the most important commands you can use as a Windows administrator. I have a short article on the command you can download at http://www.jdhitsolutions.com/tutorials.htm (grab the FOR Essentials link) .

Here are few of the examples I used in the Commandline Script session. (By the way, if you’d like to see more Command line stuff at future Techmentor shows or other scripting topics, be sure to let me or Don know.)

Assuming a text list of computer names, servers.txt and you want to do something to each computer, like ping it, you could run:

for /f %i in (servers.txt) do @ping %i

If you wanted to run cacls on a set of local directories you might try something like this:

for /f “tokens=*” %i in (‘dir /b /ad’) do @cacls %i

I use tokens to handle any directory names with spaces. If you wanted to send the results to a text file, use simple redirection. But use >> otherwise you’ll only get the results from the last directory.

for /f “tokens=*” %i in (‘dir /b /ad’) do @cacls %i >>results.txt

One trick I use to do this for remote machines is to map a network drive to a file share then run cacls on the mapped drive.

Technorati Tags: