Gilles Laurent's site (http://glsft.free.fr/) is French site (sorry for english people), but some script or tools are interesting as these ones:
EmbedFileInVBScript
http://glsft.free.fr/index.php?option=com_content&task=view&id=38&Itemid=33
A vbscript which permit to transform binary to text (for exemple, can be used for RDP to export binary to a computer by clipboard, when you do not have rights to copy files directly)
DynSetEnv
http://glsft.free.fr/index.php?option=com_content&task=view&id=67&Itemid=28
A tool to create environment variable like SET in cmd but with parent process propogation
RunAsLoggedOnUser
http://glsft.free.fr/index.php?option=com_content&task=view&id=31&Itemid=28
A tool to execute a process with user right connected on computer
DynaWrap
http://glsft.free.fr/index.php?option=com_content&task=view&id=47&Itemid=33
An improved version of WSHDDynacall http://ourworld.compuserve.com/homepages/Guenter_born/WSHBazaar/WSHDynaCall.htm
permitting to call API in vbscript, perl...
Wednesday, September 1, 2010
Delete some local users and do a report
Today, support team need help to delete a lot of same local users on multiple servers which are in a workgroup (do not ask me why they do not use AD and domain....). And all these deletions must be report.
Like today I do not have really a lot of time to help them (too much projects to finish and manage today) I decided to do a 5 min batch script.
Here it is DeleteLocalUsers.cmd
This batch use an input file named users.txt that containing users to delete like this:
No you just to run batch script to delete users (report file named result.txt)
Here user aaaaaa whas created before and bbbbbb does not exist
For better report, you can improve batch by testing if it's a successfull deletion by testing "successfully" with findstr command and errorlevel
If you need to execute this batch remotely on multiple computers, use psexec in for loop with a computers.txt file
(for example see in my blog in HP Onboard administrator and Citrix backup posts)
To download it
Like today I do not have really a lot of time to help them (too much projects to finish and manage today) I decided to do a 5 min batch script.
Here it is DeleteLocalUsers.cmd
set inputfile=users.txt
set result=result.txt
echo. >%result%
for /F %%i IN (%inputfile%) Do echo %%i >> %result% 2>>&1 & net user %%i /delete >> %result% 2>>&1
This batch use an input file named users.txt that containing users to delete like this:
aaaaaaa
bbbbbbb
No you just to run batch script to delete users (report file named result.txt)
Here user aaaaaa whas created before and bbbbbb does not exist
aaaaaa
The command completed successfully.
bbbbbb
The user name could not be found.
More help is available by typing NET HELPMSG 2221.
For better report, you can improve batch by testing if it's a successfull deletion by testing "successfully" with findstr command and errorlevel
If you need to execute this batch remotely on multiple computers, use psexec in for loop with a computers.txt file
(for example see in my blog in HP Onboard administrator and Citrix backup posts)
To download it
Monday, August 30, 2010
Format a volume larger than 32 GB in FAT32
Windows XP doesn't permit you to format FAT32 drive more than 32 gb
(see KB Q314463 Limitations of the FAT32 File System in Windows XP)
You can do this by command line using /FS switch but that doesn't work everytime
So you can use some tools
Fat32Format
http://www.ridgecrop.demon.co.uk/index.htm?fat32format.htm or
version with GUI (Alternate download location) or commandline (Alternate download location)
or
Fat32Formatter
http://tokiwa.qee.jp/EN/Fat32Formatter/ (Alternate download location)
(see KB Q314463 Limitations of the FAT32 File System in Windows XP)
You can do this by command line using /FS switch but that doesn't work everytime
format /FS:FAT32 yourletter:
So you can use some tools
Fat32Format
http://www.ridgecrop.demon.co.uk/index.htm?fat32format.htm or
version with GUI (Alternate download location) or commandline (Alternate download location)
or
Fat32Formatter
http://tokiwa.qee.jp/EN/Fat32Formatter/ (Alternate download location)
Friday, August 13, 2010
Powershell get encoding file type
Like I need to know file encoding type programmatically, I first search and found on internet a script which permit to do it. I just modified it to add some encoding type
On this page http://poshcode.org/2059 original code I also copied below (Sorry, I don't know original author for greetings)
Below my little changes to detect more encoding format refering http://en.wikipedia.org/wiki/Byte_order_mark
To use this function paste it to your profile.ps1 file or copy file on a folder and use this next line before use the function
Then use it by something like
You can download this file here
On this page http://poshcode.org/2059 original code I also copied below (Sorry, I don't know original author for greetings)
<# .SYNOPSIS Gets file encoding. .DESCRIPTION The Get-FileEncoding function determines encoding by looking at Byte Order Mark (BOM). Based on port of C# code from http://www.west-wind.com/Weblog/posts/197245.aspx .EXAMPLE Get-ChildItem *.ps1 select FullName, @{n='Encoding';e={Get-FileEncoding $_.FullName}} where {$_.Encoding -ne 'ASCII'} This command gets ps1 files in current directory where encoding is not ASCII .EXAMPLE Get-ChildItem *.ps1 select FullName, @{n='Encoding';e={Get-FileEncoding $_.FullName}} where {$_.Encoding -ne 'ASCII'} foreach {(get-content $_.FullName) set-content $_.FullName -Encoding ASCII} Same as previous example but fixes encoding using set-content #>
function Get-FileEncoding
{
[CmdletBinding()] Param (
[Parameter(Mandatory = $True, ValueFromPipelineByPropertyName = $True)] [string]$Path
)
[byte[]]$byte = get-content -Encoding byte -ReadCount 4 -TotalCount 4 -Path $Path
if ( $byte[0] -eq 0xef -and $byte[1] -eq 0xbb -and $byte[2] -eq 0xbf )
{ Write-Output 'UTF8' }
elseif ($byte[0] -eq 0xfe -and $byte[1] -eq 0xff)
{ Write-Output 'Unicode' }
elseif ($byte[0] -eq 0 -and $byte[1] -eq 0 -and $byte[2] -eq 0xfe -and $byte[3] -eq 0xff)
{ Write-Output 'UTF32' }
elseif ($byte[0] -eq 0x2b -and $byte[1] -eq 0x2f -and $byte[2] -eq 0x76)
{ Write-Output 'UTF7'}
else
{ Write-Output 'ASCII' }
}
Below my little changes to detect more encoding format refering http://en.wikipedia.org/wiki/Byte_order_mark
<#
.SYNOPSIS
Gets file encoding.
.DESCRIPTION
The Get-FileEncoding function determines encoding by looking at Byte Order Mark (BOM).
Based on port of C# code from http://www.west-wind.com/Weblog/posts/197245.aspx
.EXAMPLE
Get-ChildItem *.ps1 | select FullName, @{n='Encoding';e={Get-FileEncoding $_.FullName}} | where {$_.Encoding -ne 'ASCII'}
This command gets ps1 files in current directory where encoding is not ASCII
.EXAMPLE
Get-ChildItem *.ps1 | select FullName, @{n='Encoding';e={Get-FileEncoding $_.FullName}} | where {$_.Encoding -ne 'ASCII'} | foreach {(get-content $_.FullName) | set-content $_.FullName -Encoding ASCII}
Same as previous example but fixes encoding using set-content
# Modified by F.RICHARD August 2010
# add comment + more BOM
# http://unicode.org/faq/utf_bom.html
# http://en.wikipedia.org/wiki/Byte_order_mark
#
# Do this next line before or add function in Profile.ps1
# Import-Module .\Get-FileEncoding.ps1
#>
function Get-FileEncoding
{
[CmdletBinding()]
Param (
[Parameter(Mandatory = $True, ValueFromPipelineByPropertyName = $True)]
[string]$Path
)
[byte[]]$byte = get-content -Encoding byte -ReadCount 4 -TotalCount 4 -Path $Path
#Write-Host Bytes: $byte[0] $byte[1] $byte[2] $byte[3]
# EF BB BF (UTF8)
if ( $byte[0] -eq 0xef -and $byte[1] -eq 0xbb -and $byte[2] -eq 0xbf )
{ Write-Output 'UTF8' }
# FE FF (UTF-16 Big-Endian)
elseif ($byte[0] -eq 0xfe -and $byte[1] -eq 0xff)
{ Write-Output 'Unicode UTF-16 Big-Endian' }
# FF FE (UTF-16 Little-Endian)
elseif ($byte[0] -eq 0xff -and $byte[1] -eq 0xfe)
{ Write-Output 'Unicode UTF-16 Little-Endian' }
# 00 00 FE FF (UTF32 Big-Endian)
elseif ($byte[0] -eq 0 -and $byte[1] -eq 0 -and $byte[2] -eq 0xfe -and $byte[3] -eq 0xff)
{ Write-Output 'UTF32 Big-Endian' }
# FE FF 00 00 (UTF32 Little-Endian)
elseif ($byte[0] -eq 0xfe -and $byte[1] -eq 0xff -and $byte[2] -eq 0 -and $byte[3] -eq 0)
{ Write-Output 'UTF32 Little-Endian' }
# 2B 2F 76 (38 | 38 | 2B | 2F)
elseif ($byte[0] -eq 0x2b -and $byte[1] -eq 0x2f -and $byte[2] -eq 0x76 -and ($byte[3] -eq 0x38 -or $byte[3] -eq 0x39 -or $byte[3] -eq 0x2b -or $byte[3] -eq 0x2f) )
{ Write-Output 'UTF7'}
# F7 64 4C (UTF-1)
elseif ( $byte[0] -eq 0xf7 -and $byte[1] -eq 0x64 -and $byte[2] -eq 0x4c )
{ Write-Output 'UTF-1' }
# DD 73 66 73 (UTF-EBCDIC)
elseif ($byte[0] -eq 0xdd -and $byte[1] -eq 0x73 -and $byte[2] -eq 0x66 -and $byte[3] -eq 0x73)
{ Write-Output 'UTF-EBCDIC' }
# 0E FE FF (SCSU)
elseif ( $byte[0] -eq 0x0e -and $byte[1] -eq 0xfe -and $byte[2] -eq 0xff )
{ Write-Output 'SCSU' }
# FB EE 28 (BOCU-1)
elseif ( $byte[0] -eq 0xfb -and $byte[1] -eq 0xee -and $byte[2] -eq 0x28 )
{ Write-Output 'BOCU-1' }
# 84 31 95 33 (GB-18030)
elseif ($byte[0] -eq 0x84 -and $byte[1] -eq 0x31 -and $byte[2] -eq 0x95 -and $byte[3] -eq 0x33)
{ Write-Output 'GB-18030' }
else
{ Write-Output 'ASCII' }
}
To use this function paste it to your profile.ps1 file or copy file on a folder and use this next line before use the function
use import-module .\Get-FileEncoding.ps1
Then use it by something like
Get-Item *.log | select FullName, @{n='Encoding';e={Get-FileEncoding $_.FullName}}
You can download this file here
Wednesday, August 4, 2010
Get alias cname hostname DNS using powershell
Well, just a way in powershell to know real hostname alias (CNAME)
$computername = [System.Net.Dns]::GetHostByName("youralias")
Write-Host $computername.HostName.substring(0,$computername.HostName.IndexOf("."))
Friday, July 30, 2010
Powershell to display Storage Model for each VMWare VM
Script below permit to display which storage model is used for each VM of you Virtual Center
Download it
Download it
#
# Storage Model by VM
#
# by Franck RICHARD
# 2010 July
#
# Connect VC
$VC = "localhost"
Connect-VIServer -Server $VC | Out-Null
# Get all Datastores
$datastores = Get-Datastore
# Get All VMs
$ArrVM = Get-VM
foreach ($VM in $arrVM) {
# Get VMHost View
$VMHostView = Get-VMHost -VM $VM | Get-View
# Get all HardDisks
$HardDisks = $VM | Get-HardDisk
foreach ($HardDisk in $HardDisks) {
# Filename = "[VMFS-PROD] COMPUTER01/COMPUTER01.vmdk" for example
$DatastoreVM = $HardDisk.Filename.Split("[]")[1]
$DatastoreVMView = $datastores | where {$_.name -eq $DatastoreVM} | Get-View
# Diskname = "vmhba2:0:20" for example
$VMFSextents = $DatastoreVMView.info.vmfs.extent
foreach ($VMFSextent in $VMFSextents) {
$Diskname = $vmfsextent.Diskname
#Write-Host "Diskname:"$Diskname
}
$ScsiLuns = $VMHostView.Config.StorageDevice.ScsiLun
$bDiskFound = $False
foreach ($ScsiLun in $ScsiLuns) {
if ($ScsiLun.CanonicalName -eq $Diskname) {
#For Example
# CanonicalName = "vmhba2:0:0"
# Vendor = "EMC"
# Model = "SYMMETRIX"
$bDiskFound = $True
break
}
}
if ($bDiskFound) {
Write-Host "Name:" $VM.Name $HardDisk.Name $ScsiLun.CanonicalName "Vendor:"$ScsiLun.Vendor "Model:"$ScsiLun.Model
} else {
Write-Host "Name:" $VM.Name $diskname "not found"
}
# break # if all HardDisks are on the SAN
} # Foreach $HardDisk
} # Foreach $VM
Saturday, July 10, 2010
Site WWoIT - Wayne's World of IT
Site WWoIT - Wayne's World of IT
http://waynes-world-it.blogspot.com/
Some very interesting information about vmware and windows infrastructure
http://waynes-world-it.blogspot.com/
Some very interesting information about vmware and windows infrastructure
Subscribe to:
Posts (Atom)