您的位置:首页 > 运维架构 > Shell

powershell的一个脚本,用来测试命令的

2012-12-19 17:47 260 查看
# $1: testcase script
#   xxx.test: testcase script
#   directory specified: run.ps1 for each *.test under directory
#	execute this script in windows powershell

#: ${1:?Specify test-script-file}
if (${args}.Count -eq 0)
{
echo "Specify test-script-file"
exit 2
}
$test_file=${args}[0]

# set DST_SVR by hostname
if(-not ${MYHOSTNAME})
{
$local:MYHOSTNAME
$local:DST_SVR
$local:SPEC_HOSTNAME
$local:OWN_PSID
$local:LOGFILE

$ini_result =$(select-string -path "C:\Win32app\AdvancedCopyManager\etc\swnode.ini" -pattern MyHostName=) -split "="
${MYHOSTNAME}=${ini_result}[1]

## get the second parameter
${DST_SVR}=${args}[1]

if ( "${DST_SVR}" -ne "")
{
${SPEC_HOSTNAME} = " -h ${DST_SVR}"
}
elseif($(select-string -path "C:\Win32app\AdvancedCopyManager\etc\swstg.ini" -pattern FJSVswssc=))
{
${SPEC_HOSTNAME} = " -h ${MYHOSTNAME}"
${DST_SVR}=${MYHOSTNAME}
}
else
{
${DST_SVR}=${MYHOSTNAME}
${SPEC_HOSTNAME} = ""
}
}

# if the first parameter is a directory, then execute all the file like "*.test"
if($(test-path -PathType Container ${test_file}))
{
$file_arr = $(Get-ChildItem -Path ${test_file}\*.test -Name )
foreach($file in ${file_arr})
{
if (${file})
{
& $MyInvocation.MyCommand.Path ${test_file}\${file}
}
}
exit 0
}

# get the suffix name. "simplematch" is used for recognize "."
${EXT}= $("$test_file"  -split ".", 0, "simplematch")
# "-1" is the last element
if( "${EXT}[-1]" -eq "gen")
{
${GENERATOR}="sh"
}
else
{
${GENERATOR}="cat"
}

# create a directory,create a file
${TMP}=".\tmprunner\testrunner.ps1"
# test if the directory is exist
if (-not $(test-path -Path  ".\tmprunner\"))
{
& New-Item -Path ".\tmprunner" -ItemType "directory"
}

if($(test-path -Path  ${TMP}))
{
#clear the file content
& clear-content -Path ${TMP}
}
else
{
& New-Item -Path ${TMP} -ItemType "file"
}
# 1. preprocess
#  VAR_FILE(CONFIG) file name depend HostName:
#  because, to protect destroy device-data if fixed conf-file name.(copied other system)

# write the function into tmp file
@'
& date
echo "${test_file}"

${NG_Count}=0
${OK_Count}=0
${VAR_FILE}="$(hostname)"+".vars"
function setVars()
{
$result=$(cat ${VAR_FILE})
foreach( $i in $result)
{
if (("$i" -ne " ") -and $($i  -match "^[^#]"))
{
${varname}=$(${i} -split "=")[0]
${varvalue}=$(${i} -split "=")[1]
}
& set-variable -name ${varname} -value ${varvalue} -scope "script"
echo "+ ${varname}=${varvalue} "
}
}
# check each command after executed, the first parameter is
# the first parameter is this command
# the second parameter is respect exit code
function checkResult()
{
echo "----------------------------------"
$command=$args[0]
echo "|  command:	$command"
echo "|  exitcode: 	$LastExitCode"
if($LastExitCode -eq $args[1])
{
echo "|  result:	OK"
set-variable OK_Count ($OK_Count+1) -scope 1
}
else
{
echo "|  result:	NG"
set-variable NG_Count ($NG_Count+1) -scope 1
}
echo "----------------------------------"
}

# at the end of test log
# print the sum nummber of result
# no parameter
function Show_Report()
{
$Total=${OK_Count}+${NG_Count}
echo "---------Test Report---------"
echo "total number: 	$Total"
echo "OK number: 	${OK_Count}"
echo "NG number: 	${NG_Count}"
}
setVars
'@ >> ${TMP}

${result}=$(cat ${test_file})
foreach($i in ${result})
{
if (("$i" -ne " ") -and $($i  -match "^[^#]"))
{
if ($( ${i} |select-string -pattern "echo"))
{
#	echo "$i" >>${TMP}
}
elseif ( -not $( ${i} |select-string -pattern "checkResult"))
{
echo "echo `"+ $i `" " >>${TMP}
}
echo "& $i" >>${TMP}
}
}

# 2. logging
#  determine logfile name
${result}=$("${test_file}" -split "\\")
${result}[-1]=${result}[-1].split(".")[0]
${result}[-1]=${result}[-1]+".log"
${TESTCASE_LOG_NAME}=""
foreach($i in ${result})
{
if ($i -and ($i -ne '.') -and ($i -ne '..'))
{
${TESTCASE_LOG_NAME}="${TESTCASE_LOG_NAME}"+"_${i}"
}
}

${HOSTNAME}=$(hostname)

${LOGFILE}="..\logs\"+"${HOSTNAME}"+"${TESTCASE_LOG_NAME}"
if( -not $(test-path -Path  ${TMP}))
{
& New-Item -Path ${LOGFILE} -ItemType "file"
}

# 3. executing
& ${TMP} 2>&1 | tee-object -filepath ${LOGFILE}
sleep 3

# 3. delete tmp directory
if (test-path -path .\tmprunner)
{
& remove-item -path .\tmprunner -recurse
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: