Power Shell2010. 2. 3. 08:59

일단 foreach문으로 log를 파일에 이렇게 저장하고 싶었다.


 2010-02-03 오전 8:51:37 ([Success] [Join] Machine Type: Display, Client Id: Ip Address:172.16.20.191, Machine Type: 
 2010-02-03 오전 8:48:34 ([Success] [Join] Machine Type: Display, Client Id: Ip Address:172.16.20.191, Machine Type:  
 2010-02-03 오전 8:45:31 ([Success] [Join] Machine Type: Display, Client Id: Ip Address:172.16.20.191, Machine Type:  


근데 이게  c#처럼 \r\n을 쓸수가 없어서 찾아밨지만 못찾았다...


그래서 그냥 stringbuilder의 appendline()을 이용해서 성공 


$strBld = new-object System.Text.StringBuilder

foreach ($data in $GetJoinDataSet.Tables[0])
{
$ShowJoinInfo= " {0} ({1} " -f $data[3], $data[4];
$strBld.Append($ShowJoinInfo)
$strBld.AppendLine()
}


Set-Content -Path ".\logs\JoinLog.xml" -Value $strBld
}

참고 : http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!811.entry

Posted by 동동(이재동)
Power Shell2010. 1. 14. 19:07

eq야 equal 로 다 안다 하지만


=! 인건 -ne 이다.



Posted by 동동(이재동)
Power Shell2010. 1. 14. 16:06

$SQLSERVER=read-host "Enter SQL Server Name:"
$Database=read-host "Enter Database Name:"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$SQLSERVER;Database=$DATABASE;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "select name from sysobjects where type='u'"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]


이렇게 하면 된다. 이제 sqlcmd.exe 랑은 끝이다~


참고 : http://www.databasejournal.com/features/mssql/article.php/3686216/Microsoft-Windows-PowerShell-and-SQL-Server-2005-SMO--Part-3.htm




Posted by 동동(이재동)
Power Shell2010. 1. 14. 16:05

스크립트를 짜다 보면 빨강색으로 나오는 오류메세지를 감추어야할때가 있다.


try
{
$ErrorActionPreference = "Stop"
$Wcf=New-WebServiceProxy -uri "http://$ControlServerIP/Service.svc?wsdl"
[String]$CastData = $Wcf.GetData("$CastServerIP")
echo "Cast Server GetData is Success. Path : ./Log/CastGetData.xml"
}
catch [SystemException]
{
echo "Cast Server GetData is Failed."
}
Finally
{
Set-Content -Path ".\log\CastGetData.xml" -Value $CastData
}


위에서 $Wcf 함수에서 ip가 틀리면 에러가 나지 않고 바로 catch문으로 가고 싶었다....


하지만 꼭 빨강색에러를 낸후 catch문으로 갔다 그래서 이거를 안나게 하는 방법이 있을까 해서 찾아낸게


$ErrorActionPreference = "Stop"


쓰기 귀찮아서 복사해야지 설명은


핵심은 일반적인 셸 오류 메시지는 예외와 다르다는 점을 이해하는 것입니다. 비종료 오류와 종료 오류가 있는데 종료 오류는 파이프라인 실행을 중지하고 예외를 발생시킵니다. 오직 예외만 트랩이 가능합니다. 오류가 발생하면 셸은 기본 제공 $ErrorActionPreference 변수를 찾아 수행할 작업을 확인합니다. 이 변수의 기본값은 "Continue"입니다. 이는 "오류 메시지를 표시하고 작업을 계속 실행하라"는 의미입니다. 값을 "Stop"으로 변경하면 이 변수는 오류 메시지를 표시하고 트랩 가능한 예외를 생성합니다. 그러나 이는 스크립트의 모든 오류가 예외를 생성함을 의미합니다.


Posted by 동동(이재동)
Power Shell2010. 1. 14. 14:51
참고  : http://channel9.msdn.com/wiki/windowspowershellquickstart/
Posted by 동동(이재동)
Power Shell2010. 1. 14. 13:24

이야 이렇게 쉽게 되다니 뻘짓했다...


$wcf=New-WebServiceProxy -uri "http://172.16.20.84/Service.svc?wsdl"
$wcf | Get-Member


이렇게만 하면 쓸수있고 테스트 데이터를 날릴수가 있다.


참고한 사이트

http://powershellcommunity.org/Forums/tabid/54/aff/1/aft/4283/afv/topic/Default.aspx

http://cglessner.blogspot.com/2008/12/call-wcf-services-with-powershell.html


'Power Shell' 카테고리의 다른 글

[ps] 오류 메세지를 감추고 싶을때...  (0) 2010.01.14
[ps] 기본문법 3  (0) 2010.01.14
[ps] 파일이나 폴더 exist 확인법  (0) 2010.01.07
[ps] 파일 소트 방법  (0) 2009.12.30
[ps] if switch 등 기본문법  (0) 2009.12.15
Posted by 동동(이재동)
Power Shell2010. 1. 7. 13:31
if (test-path $LogFolder)
{
# echo "Exist folder"
}
else
{
mkdir $LogFolder

}


폴더나 파일도 다 test-path로 할수 있다.

Posted by 동동(이재동)
Power Shell2009. 12. 30. 15:34

$dirs = dir $BackupFolder | sort @{expression={$_.LastWriteTime}}    


출처 : http://stackoverflow.com/questions/520437/bash-dos-powershell-script-to-list-most-recent-versions-of-files


Posted by 동동(이재동)
Power Shell2009. 12. 15. 21:41

유닉스의 전통적인 장점은 내장 스크립트를 지원하는 셸과 스크립트 작성에 요긴한 명령행 유틸리티를 풍부하게 보유하고 있다는 점입니다. 반면 윈도는 스크립트라고는 도스 시절부터 그대로 내려온 배치 파일이 고작인데, 문법과 기능이 너무 조악한 관계로 요즘 사용자들의 눈높이로는 스크립트라고 부르기도 민망한 수준입니다. 

많은 용도가 있지만 스크립트가 유용하게 쓰이는 분야는 특히 서버 운영의 자동화입니다. 유닉스가 그 동안 윈도에 완전히 압도 당하지 않고 시장에서 꾸준히 생존해 온 이유 중 하나가 스크립트를 잘 지원한 덕분이기도 했습니다. 하지만 이 우위는 작년에 마이크로소프트가 야심적으로 발표한 PowerShell이란 새로운 셸에 의해 도전을 받게 된 듯 합니다.

버전 1.0이란 태그를 달고 첫선을 보인 PowerShell(이하 PS)은 특이하게도 네이티브 Win32가 아닌 닷넷 프레임워크 2.0 기반의 애플리케이션입니다. 윈도 XP에서는 운영 체제의 일부로 %SystemRoot%\System32 디렉토리 밑에 설치됩니다. 지난 며칠 동안 살펴 본 PS는 일단 스크립트 언어의 문법이 펄과 아주 유사하게 생겼지만 완전히 같지는 않고, 파이썬과 비슷하게 대화형 모드를 기본 지원하며, 유닉스처럼 파이프의 사용에 크게 의존하고, 전체적인 명령과 문법이 상당히 일관적이고, 닷넷 런타임과 쉽게 연동 가능하며, 최신 기술 답게 유니코드 인코딩과 문자셋간 변환 등을 잘 지원합니다. 펄과도 비슷하고, 파이썬과도 비슷하고, 유닉스와도 비슷하면서 닷넷과 연동된다니, 일단 뭔가 거대한 것이 있을 듯한 느낌이 들었습니다만... :-) 학습 난이도는 유닉스 셸 프로그래밍 경험이 있는 사용자라면 누구나 어렵지 않게 배울 수 있을 것 같고, 특히 펄 사용자라면 아주 빨리 적응할 것 같습니다.

저도 아직 맛보기만 몇 가지 해본 정도라서 고급 내용을 소개하기는 어렵고, 오늘은 간단한 실행법만 소개하도록 하겠습니다.

PS를 실행하면 cmd.exe를 실행한 것과 비슷한 화면이 뜹니다.
Windows PowerShell
Copyright (C) 2006 Microsoft Corporation. All rights reserved.

PS C:\Documents and Settings\Hwychol.AHN>

이 상태에서 파이썬처럼 간이 계산기로 사용이 가능합니다:
PS C:\Documents and Settings\Hwychol.AHN> 100/13
7.69230769230769

역시 파이썬과 마찬가지로 명령행에서 바로 변수를 사용할 수도 있는데, 변수는 이름 앞에 $를 붙입니다(어디서 많이 보던 방식이지요? :-) 변수는 사용하기 전 정의하거나 타입을 지정할 필요가 없어서 아래처럼 바로 사용이 가능합니다:
PS C:\Documents and Settings\Hwychol.AHN> $a = 1
PS C:\Documents and Settings\Hwychol.AHN> $a
1
PS C:\Documents and Settings\Hwychol.AHN> $a+1
2

명령행에서 바로 치는 것 말고 스크립트 파일로 저장해서 실행할 때는 확장자로 .ps1을 붙입니다. 나중에 버전 2, 3, ...이 나왔을 때 끝의 숫자로 구분하기 위한 모양입니다. 아무 에디터로 다음 내용을 입력한 다음 test.ps1라고 저장해 봅시다:

$a = 1
$a


이렇게 한 다음 명령행에선

PS C:\Documents and Settings\Hwychol.AHN> .\test.ps1


이라고 쳐서 실행합니다. 현재 디렉토리에 있는 스크립트를 실행할 때 .\를 앞에 꼭 붙여야 한다는 점을 유의해야겠습니다(이 점도 유닉스의 영향을 받은 부분이군요).

그런데 실제로 위의 명령을 실행하려고 하면

PS C:\Documents and Settings\Hwychol.AHN> .\test.ps1
File C:\Documents and Settings\Hwychol.AHN\test.ps1 cannot be loaded because the execution of scripts is disabled on this
system. Please see "get-help about_signing" for more details.
At line:1 char:10
+ .\test.ps1 <<<<


라고 무시무시한 에러가 나 버립니다. 이런 황당함이란...ㅡ.ㅡ 사실 이 에러는 보안상 의도된 것으로, 실행 정책을 변경해 주어야 스크립트 실행이 가능해집니다. 실행 정책의 변경은 아래 명령으로 합니다:

PS C:\Documents and Settings\Hwychol.AHN> Set-ExecutionPolicy RemoteSigned


제대로 바뀌었는지 Get-ExecutionPolicy로 확인할 수 있습니다:

PS C:\Documents and Settings\Hwychol.AHN> Get-ExecutionPolicy
RemoteSigned


참고로 PS는 대소문자 구별에 관대하기 때문에 set-executionpolicy, get-executionpolicy, remotesigned라고 쳐도 됩니다.

이제 다시 test.ps1을 실행해 보면 결과가 정상적으로 출력되는 것을 볼 수 있습니다:

PS C:\Documents and Settings\Hwychol.AHN> .\test.ps1
1

PS 스크립트는 C나 펄 계열처럼 들여쓰기를 자유롭게 할 수 있습니다. 아래 예에서는 보기 좋게 하려고 일부러 줄을 많이 바꿨지만 전체 문장을 한 줄로 써도 됩니다.

코멘트

셸 스크립트라 그런지 코멘트는 싱글 라인 코멘트 #만 쓸 수 있습니다.

크기 비교 연산자

C에 대응하는 PS의 크기 비교 연산자는 다음과 같습니다.



-gt, -lt 같은 이해하기 힘든 기호를 쓰는 이유는 >, < 기호를 리디렉션 용도로 쓰기 때문입니다. 그렇지만 일단 익히고 나면 유닉스 셸이나 펄을 배울 때 연산자를 다시 익힐 필요가 없는 장점이 보너스로 생깁니다.

연산자는 결과로 참 아니면 거짓을 리턴합니다. 즉,

PS> 7 -eq 5
True


이 되겠습니다.

이들 크기 비교 연산자를 -and, -or 등의 논리 연산자와 섞어 쓰면 훌륭한 식이 됩니다. 예를 들어

PS> (7 -lt 10) -and (5 -gt 3)
True


기본 문법(?)을 익혔으니 이제는 제어 구문을 하나씩 들여다 보기로 하겠습니다.

if 문

if ($count -lt 5) # $count가 5보다 작으면
{
"foo!"
}
elseif ($number -gt 1000) # 그렇지 않고 $number가 1000보다 크면
{
"bar!"
}
else # 이것도 저것도 아니면
{
"duh!"
}


elsif 대신 elseif라는 점을 제외하고는 펄과 거의 같습니다. {, } 기호는 필수라서 블럭 안에 문장이 하나만 있어도 생략하면 안됩니다.

switch 문

switch ($count)
{
{$_ -lt 5} # $_가 5보다 작으면 다음 블럭을 실행
{ "foo!" }

10 # { $_ -eq 10 }의 축약형. "case 10:"이라고 읽으면 됩니다.
{ "bar!" }

default # C의 default: 와 같음
{ "duh!" }
}


switch 문내에서 쓰이는 $_ 변수는 switch 괄호안의 결과값을 뜻합니다. 여기서는 $count의 값이 되겠습니다.

for 문

for ($i = 0; $i -lt 10; $i++)
{
"foo!"
}


for문은 그다지 특별한 점이 없는 것 같군요.

while 문

while ($i -le 10)
{
"foo!"
}


while도 마찬가지.

foreach 문

foreach ($i in 1..5)
{
$i
}


요즘 유행하는(?) foreach가 PS에도 있습니다. 위에서는 1부터 5까지로 이루어진 배열(1..5)로부터 하나씩 값을 받아 화면에 찍습니다. 이 foreach는 상당히 재미있는 형태로 응용할 수 있는데, 예를 들어 위의 문장을 파이프를 쓰는 형태로

1..5 | foreach { $_ }


라고 써도 같은 결과가 나옵니다. foreach의 오묘한 세계는 따로 뽑아 단독 특집을 꾸며도 재미있을 듯...

do...while 문

$i = 1;
do
{
$i ; $i++ # 한 줄에 명령을 여러 개 쓸 때에는 ;로 구분합니다
}
while ($i -lt 10)


do...while문은 별로 안쓰는 루프지만 PS에도 있군요. 뜻은 다른 언어에서와 마찬가지로 '~할 동안 실행하라'가 되겠습니다. $i가 10보다 작을 동안 루프를 계속 돕니다.

do...until 문

$i = 1;
do
{
$i ; $i++
}
until ($i -gt 10)


do...until 문은 do...while 문과 반대로 '~할 때까지 실행하라'는 뜻입니다(파스칼의 repeat...until과 같은 용법?). 위 예에서는 $i가 10보다 커질 때까지 루프를 계속 돕니다.
목록


http://cafe.naver.com/ArticleRead.nhn?clubid=12200394&page=1&menuid=50&boardtype=&articleid=4145

Posted by 동동(이재동)
Power Shell2009. 12. 15. 21:33
Function DeleteExpireBackupFolder
{
[String]$Date = Get-Date -UFormat "%m%d%y(%H;%M;%S)"

$dirs = dir $BackupFolder

foreach ($folderName in $dirs)
{
[string] $FolderDate = "{0}/{1}/{2}" -f $folderName.ToString().Substring(0,2), $folderName.ToString().Substring(2,2),$folderName.ToString().Substring(4,2)
[string] $NowDate = "{0}/{1}/{2}" -f $Date.ToString().Substring(0,2),$Date.ToString().Substring(2,2),$Date.ToString().Substring(4,2)

$FolderDateToDateTime = [System.DateTime]$FolderDate
$NowDateToDateTime = [System.DateTime]$NowDate
$AddFolderDateToDateTime = $FolderDateToDateTime.AddDays(14)

if($AddFolderDateToDateTime -lt $NowDateToDateTime)
{
Remove-Item $BackupFolder$folderName -Recurse -Force
echo "Deleted $BackupFolder$folderName"
}
}

}


[#FILE|LogBackup.ps1|pds/200912/15/37/|mid|0|0|pds17|0#]


'Power Shell' 카테고리의 다른 글

[ps] 파일 소트 방법  (0) 2009.12.30
[ps] if switch 등 기본문법  (0) 2009.12.15
[ps] 파워셜에서 hashtable쓰기  (0) 2009.12.07
[ps] file copy ,delete 하기  (0) 2009.12.07
[ps] WMI를 통한 Hyper-V 관리...  (0) 2009.12.03
Posted by 동동(이재동)
Power Shell2009. 12. 7. 11:32
이상하다 분명히 포스트 한거 같은데 안되어있네.........



$IpHashTable =@{}

$IpHashTable.add("$count",$addr)



이렇게 하면 되는듯



부를땐



$IPAddress = $IpHashTable.get_Item($SelectValue)







Function ShowAllIP

{

$IPconfigset = Get-WmiObject Win32_NetworkAdapterConfiguration

$IpHashTable =@{}

$count = 0



foreach ($IPConfig in $IPConfigSet)

{

if ($Ipconfig.IPaddress)

{

foreach ($addr in $Ipconfig.Ipaddress)

{

$IpHashTable.add("$count",$addr)

" {0} : IP Address : {1}" -f $count, $addr;

$count++

}

}

}



InputIP $IPHashTable

}



Function InputIP

{

param([System.Collections.HashTable]$IpHashTable )

Write-Host "Choose IP Address"

[String]$SelectValue = Read-Host "select number:"

$IPAddress = $IpHashTable.get_Item($SelectValue)

echo "SELECT VALUE = $SelectValue"

echo "IP = $IPAddress"



MakeSite($IPAddress)

}



일단 이거 ip가져와서 list에 뿌리는건데 참조하자(내가 만듬)
Posted by 동동(이재동)
Power Shell2009. 12. 7. 10:41
http://technet.microsoft.com/ko-kr/library/ee156818(en-us).aspx

http://www.activexperts.com/activmonitor/windowsmanagement/powershell10/0032/



xcopy 를 써두 되는데 모양새가 안나니까

Copy-Item을 쓴다

옵션에 -recurse를 쓰면 하위폴더도 다 카피된다.



지울때는 -force를 써서 강제로 지운다
Posted by 동동(이재동)
Power Shell2009. 12. 3. 09:16
http://blogs.technet.com/koalra/archive/2008/03/31/wmi-hyper-v.aspx
Posted by 동동(이재동)
Power Shell2009. 12. 3. 09:03











출처 http://powershell.com/cs/media/p/133.aspx





Posted by 동동(이재동)
Power Shell2009. 11. 11. 11:12
##################################################################
# StartUpInstall - 이재동 - jdlee@innotive.com
#
# 부팅시 Install2를 자동으로 실행한다.
#
#################################################################

param
(
[string]$ParamOption
)

Function StartUpInstall
{
param([string]$ParamOption )
$RegStartUp= "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
if ($ParamOption -eq "/u")
{
Remove-ItemProperty $RegStartUp -Name Install
}
else
{
Set-ItemProperty $RegStartUp -Name Install -Value c:\setup\install2.bat
}
}

StartUPInstall $ParamOption




Remove-ItemProperty $RegStartUp -Name Install = regkey를 지우는것


Set-ItemProperty $RegStartUp -Name Install -Value c:\setup\install2.bat  = regkey 수정이나 추가할때 쓰인다.



startup 출처: http://blog.scorpiotek.com/2008/12/31/how-to-create-startup-items-on-server-core/

Posted by 동동(이재동)
Power Shell2009. 11. 11. 10:33
1) SConfig.exe를 실행한다
그러면 다음과 같은 그림이 나타난다


여기서 4)configure Remote Management를 선택하기 위해 4를 입력한다. 그러면 다음과 같은 그림이 나타난다


여기서 각 항목을 선택하면 다음과 같은 기능이 실행되는 것이다.
1) Allow MMC Remote Management : 이것은 원격 컴퓨터에서 MMC 관리도구를 통하여 접속하도록 허용하는 것이다
a. Virtual Disk Service(VDS)를 구성하여 Auto Start 설정하기.
b. Virtual Disk Service 시작하기
c. 방화벽 설정에서 "Remote Administration"에 대하여 예외 설정함(즉, 방화벽은 ON이 상태에서 원격 관리로 접속하는 것은 허용하겠다는 뜻이다)
d. 방화벽 설정에서 "Windows Firewall Remote Management" 에 대하여 예외 설정함
e. 방화벽 설정에서 "Remote Volume Management" 에 대하여 예외 설정함
2) Enable Windows PowerShell : Windows PowerShell을 설치한다
a. .ps1 파워셀 스크립트를 실행할 수 있도록 구성함 (RemoteSigned)
b. DISM을 사용하여 [NetFx2-ServerCore] feature 설치함
c. DISM을 사용하여 [MicrosoftWindowsPowerShell] feature를 설치함
3) Allow Server Manager Remote Management : 원격 컴퓨터의 [서버 관리자]를 통하여 로컬 Server Core를 관리하도록 허용함
a. [Windows PowerShell]이 설치되어 사용 가능한지 확인한다
b. [ServerManager-PSH-Cmdlets] 및 [BestPractices-PSH-Cmdlets] feature를 설치한다
c. 아래의 PowerShell Script를 실행한다
PS C:\> Configure-SMRemoting.ps1 –force –enable
4) Show Windows Firewall Settings : 현재 방화벽 설정 상태를 확인한다

a. Netsh advfirewall show currentprofile 명령을 실행한다


출처: http://bloglee.egloos.com/5079789

Posted by 동동(이재동)
Power Shell2009. 11. 4. 15:34

-encoding UTF8 이거 앞에 붙여야 에러가 안난다 꼭 인코딩을 신경쓰자



[xml] $XmlContent = Get-Content "c:\web.config" -encoding UTF8


echo $XmlContent.configuration.'system.serviceModel'.services.service.host.baseAddresses.add

echo $XmlContent.configuration.'system.serviceModel'.services.service.endpoint.address


이렇게 xml을 불러올올수 있고 노드를 찾아가면 된다. 만약 " . "이 있을경우 ' '로 묶으면 된다...


저렇게 되면 해당 노드값을 출력할수 있다.


수정및 저장은

$XmlContent.configuration.'system.serviceModel'.services.service.host.baseAddresses.add.baseAddress = "http://172.16.10.99:21000/MessageService.svc"
$XmlContent.configuration.'system.serviceModel'.services.service.endpoint.address = "net.tcp://172.16.10.99:20000/MessageService.svc"
$xmlContent.Save("c:\web.config")


머 이렇게 save를 하니까 잘되었다 하지만 인코딩이 좀 이상하다 확인해보아야할 부분이다.


powershll xml control에 대한 정보는 여기서 많이 얻을수 있다.

http://powershell.com/cs/blogs/tobias/archive/2009/02/02/xml-part-2-write-add-and-change-xml-data.aspx

Posted by 동동(이재동)
Power Shell2009. 10. 28. 10:53
powershell simple menu

http://www.blkmtn.org/powershell-a-simple-menu

dictionary 사용

http://devcentral.f5.com/weblogs/Joe/archive/2008/12/29/powershell-abcs---g-is-for-generics.aspx


array 사용


http://blogs.sybase.com/powerbuilder/2009/07/powerscript-array-enhancement/

또 다른 hashtable 사용법(serer core 버전에서 위의 dictionary가 안되서 이걸썼다)


http://mow001.blogspot.com/2006/09/powershell-learn-about-hashtable_07.html


사용은 했지만 정리하기 귀찮아서 찾아낸 사이트만 적는다..
Posted by 동동(이재동)
Power Shell2009. 10. 28. 10:51

Failed to process input: The parameter 'Site'].ftpServer.security.ssl.controlChannelPolicy='SslAllow'' must begin with a / or - (HRESULT=80070057).


머 이런 에러가 자꾸 나와서 보았더니 " 나 ' 문제 였다.......


왜냐하면 cmd에서는 되기때문이다.. 그래서 배치파일로만 돌렸는데.......


c:\Windows\System32\inetsrv\appcmd.exe set site "MessageService" -+bindings.[protocol='net.tcp',bindingInformation='20000:172.16.10.25']


이게 있으면 

c:\Windows\System32\inetsrv\appcmd.exe set site MessageService "-+bindings.[protocol='net.tcp',bindingInformation='$IP']"


이렇게 바꾸어야한다 자세히 보면 -+bindings 에 보면 " 가 있다.........


와  powershell는 왜이렇게 해야하지?


저 실행문을 덕분에 배치파일이 아닌 powershell에서 사용할수 있었다.... 


참조 사이트 : http://blogs.iis.net/robert_mcmurray/archive/2008/10/02/appcmd-80070057-errors-when-configuring-site-level-settings.aspx



Posted by 동동(이재동)
Power Shell2009. 10. 12. 15:16
function CopyFiles
{
if (test-path $OriginalPath)
{
echo "The folder exists2"
}
}

Posted by 동동(이재동)
Power Shell2009. 10. 7. 16:06
아 바보같이 , 를 안써서 삽질했다.......

sqlcmd를 이용하면 server core에서 나 머 다 가능하다..

#attach db
$path = 'c:\Program Files (x86)\Microsoft SQL Server\90\Tools\Binn\'
$id = "sa"
$pass = "inno1029#"
$excuteFileName = "SQLCMD.EXE"
$dbName = "iCONTROL Data"
$dbMdfFileName = "C:\iCONTROL Server\iCONTROL Database\iCONTROL_Data.mdf"
$dbLDFFileName = "C:\iCONTROL Server\iCONTROL Database\iCONTROL_Data_log.LDF"

$fullPath = $path+$excuteFileName
& $fullPath -S '127.0.0.1,1433' -Q "sp_attach_db '$dbName', '$dbMdfFileName', '$dbLDFFileName'"
Posted by 동동(이재동)
Power Shell2009. 10. 7. 11:38

 Windows PowerShell

구글링: Windows PowerShell

 

 http://blogs.msdn.com/powershell/archive/2007/11/06/the-community-technology-preview-ctp-of-windows-powershell-2-0.aspx

http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=845289ca-16cc-4c73-8934-dd46b5ed1d33

 

온라인 세미나

https://msevents.microsoft.com/CUI/WebCastRegistrationConfirmation.aspx?culture=ko-KR&RegistrationID=1296409903&Validate=false

소개

 http://qaos.com/article.php?sid=2532

파워셀 제공 명령어 설맹

http://qaos.com/article.php?sid=2533

 구문 설명.

 http://www.eldorado29.com/entry/Windows-PowerShell-%EA%B5%AC%EB%AC%B8

사용설명서

http://itka.kr/zbxe/?mid=oswindows&sort_index=readed_count&order_type=desc&page=3&document_srl=997

 

 

도움말.

get-help <cmdlet 이름> -detailed

get-help Get-Command

get-help get-command -detailed

get-help get-command -full

get-help get-command -examples

get-help get-command -parameter totalcount

 

 

 실행권한세팅

Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy Unrestricted

 

s로 시작하는 프로세스보기

Get-Process [s]*

 PS HKLM:\> Get-Process | Group-Object processname

PS HKLM:\> Get-Process powershell | format-list modules, handles

 PS HKLM:\> Get-Process powershell | format-list *

 

 

PS HKLM:\> Get-Process | Sort-Object id

 PS HKLM:\> Get-Process | Sort-Object id -descending

 

레지스트리접근

CD hklm:  // HKEY_LOCAL_MACHINE          hkcu: // HKEY_CURRENT_USER

dir

cd SYSTEM

 

레지스트리 값가져오기 쓰기

PS HKLM:\> Get-ItemProperty SOFTWARE/Microsoft/windows/CurrentVersion/Run

Set-ItemProperty HKLM:/Example -name hello value 1

 

 텍스트 파일 가져오기.

Get-Content c:\a.txt

 

 

PS C:\> $text = "asdf ;lalksdfj"
PS C:\> Set-Content c:\a.txt $text
PS C:\> Get-Content c:\a.txt
asdf ;lalksdfj

 

XML

PS C:\> Get-Content c:\h.xml
<?xml version='1.0' encoding='euc-kr'?>
<jGame DOC_TYPE='APP'>
</jGame>

 

PS C:\> [xml]$hello = Get-Content c:\h.xml
PS C:\> echo $hello.jGame

DOC_TYPE
--------
APP

 

 

int, string 

 PS C:\> [int]$i="1"
PS C:\> $i +1
2

 

 PS C:\> [string]$s="1"
PS C:\> $s + 1
11

 

COM사용

 

 PS C:\> $ie = New-Object -comobject "internetexplorer.application"
PS C:\> $ie | Get-Member -MemberType method


WMI

 

PS C:\> Get-WmiObject win32_processor

PS C:\> Get-WmiObject win32_bios

PS C:\> Get-WmiObject win32_physicalmemory

 

 

 

  

 

get-service | get-member

 

. cmdlet 가져오는 개체 유형을 확인하려면 파이프라인 연산자(|) 사용하여 "get" 명령의 결과를 Get-Member 명령으로보내면 됩니다. 예를 들어 다음 명령은 Get-Service 명령에 의해 검색된 개체를 Get-Member 보냅니다.

 

 

 

PS R:\bin\ps1> get-service schedule | format-list -property *


Name                : Schedule
CanPauseAndContinue : False
CanShutdown         : False
CanStop             : False
...       :

 

PS R:\bin\ps1> get-service schedule | format-table -property *

 

Name     CanPause CanShutd  CanStop DisplayN Dependen MachineN ServiceN Service Service  Status Service Site
         AndConti      own          ame      tService ame      ame      sDepend Handle             Type
              nue                            s                          edOn
----     -------- --------  ------- -------- -------- -------- -------- ------- -------  ------ ------- ----
Schedule    False    False    False Task ... {}       .        Schedule {RpcSs} Safe... Stopped ...cess

 

 

 

PS R:\bin\ps1> ipconfig | findstr "Address"

        IP Address. . . . . . . . . . . . : 192.168.2.215

 

별칭 만들기

set-alias gh get-help

set-alias np c:\windows\notepad.exe

remove-item alias:ls

function bootini {notepad c:\boot.ini}

 

 

Windows 프로그램 사용

PS> $env:path += ";newdirectory"

$env:path += ";C:\Program Files\Windows NT\Accessories"

get-psdrive

 

 

 

 

프로필 만들기

test-path $profile

new-item -path $profile -itemtype file -force

notepad $profile

 

 Out-* Cmdlet사용하여데이터리디렉션

Get-Process | Out-File -FilePath C:\temp\processlist.txt
 PS> Get-Process | Out-Host -Paging | Format-List
 PS> Get-Process | Format-List | Out-Host -Paging
PS> Get-Command | Out-Null
 Get-Command Get-Command | Out-Printer -Name "Microsoft Office Document Image Writer"

S> Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII

 

 

PS> Get-Command | Out-File -FilePath c:\temp\output.txt

Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647

Get-Location

 Set-Location -Path C:\Windows -PassThru

 

최근 위치 저장  다시 불러오기(Push-Location  Pop-Location)

 Get-Location

 

스택에 현재 위치를 올려놓은 다음 Local Settings 폴더로 이동하려면 다음과 같이 입력하십시오.

Push-Location -Path "Local Settings"

 Pop-Location -PassThru

 

항목 실행(Invoke-Item)

 Invoke-Item C:\WINDOWS

 Invoke-Item C:\boot.ini

 

 

NET  COM 개체 만들기(New-Object)           

 New-Object -TypeName System.Diagnostics.EventLog

New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application

 $AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application

 

New-Object -ComObject WScript.Shell

New-Object -ComObject WScript.Network

New-Object -ComObject Scripting.Dictionary

New-Object -ComObject Scripting.FileSystemObject

 

$ie = New-Object -ComObject InternetExplorer.Application

$ie.Visible = $true

 $ie.Navigate("http://www.microsoft.com/technet/scriptcenter/default.mspx")

$ie.Document.Body.InnerText

$ie.Document.Body | Get-Member

 $ie.Quit()

 $ie = $null

Remove-Variable ie

 

 

 액셀

$xl = New-Object -ComObject Excel.Application -Strict
$xl.Visible =  $true

 

 

컴퓨터의 IP 주소 표시

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property IPAddress

 

출처 : http://mech12.springnote.com/pages/1112272

'Power Shell' 카테고리의 다른 글

[ps] 폴더 존재여부 검사하기  (0) 2009.10.12
[ps] db 수동으로 붙이기  (0) 2009.10.07
[ps] 파워셀 기본문법  (0) 2009.10.07
[ps] 레지스트리 수정하기  (0) 2009.10.07
[ps] power shell 메뉴얼  (0) 2009.10.06
Posted by 동동(이재동)
Power Shell2009. 10. 7. 11:35
기본명령형식 : cmdlet(command-let)
정규식 표현, 파이프 연결가능

명령어의 도움말 : Get-Help 명령어 // o : -full = 도움말 전체




스크립트실행 보안해제 
PS > Set-ExecutionPolicy RemoteSigned
PS > Set-ExecutionPolicy Unrestricted // 공유폴더에 위치한 서명안된 스크립트 실행



변수지정
PS > $변수명 = 내용
PS > [변수타입]$변수명 = 내용 // 변수타입 지정 : xml, int, char, string ...
변수명은 영문 및 한글, 숫자로만 된 이름도 가능

배열사용
@으로 배열을 표현. 변수에 저장해야 함. 참조는[참조]형식
PS > $ar = @(1,1,1,1,)
PS >echo $ar[0]

PS > $ar = @((1,1,1,1,),(2,2,2,2,))
PS > echo $ar[0][0]

산술,증감,할당 연산은 기존 언어와 거의 똑같음.

주석은 #

비교연산자
-eq =
-ne !=
-gt >
-ge >=
-lt <
-le <=

논리연산자
!
-not !
-and &
-or |

조건문(if, elseif, else)
반복문(for, foreach, while, do while, do until, continue, break)
분기문(switch)
기존의 언어와 거의 똑같음. 비교연산자만 주의
foreach($value1 in $array) // array내용 순서대로 value에 대입하면서 반복

함수만들기 
functin 함수명
{
함수내용
}

함수호출은 함수명. 매개변수는 공백으로 구분

매개변수(스크립트, 함수)
$args변수안에 배열로 저장됨

반환값(스크립트, 함수)
return 반환값

명령행 실행시 주의사항(스크랩트 예외)
조건문, 반복문, 분기문, 함수등을 사용할땐 해당 구문을 한줄로 작성해야 한다.({}포함)
명령이 여러개일경우, ;으로 구분한다.

스크립트를 변수에 저장한뒤 실행할수 있음
PS > $변수 = {스크립트}
PS > &$변수



디렉토리 명령어 : ls, dir

레지스트리 접근(레지스트리 내용은 디렉터리와 동일하게 접근)
HKEY_LOCAL_MACHINE : cd HKLM:
HKEY_CURRENT_USER : cd HKCU:

레스스트리 읽기, 쓰기
PS > Get-ItemProperty 키이름
PS > Set_ItemProperty 위치 -name 키이름 -value 키값



프로세스 출력
PS > Get-Process 

출력결과 그룹화 : 명령 Group-Object 오브젝트

출력결과 속성선택 : 명령 Format-List 속성, 속성 // o : * = 모든속성 출력

출력결과 정렬 : 명령 Sort-Object 정렬오브젝트 // o : -descending = 큰 순서 정렬)



파일 읽기
PS > Get-Content 파일명

파일 쓰기 
PS > Set-Content 파일명 쓸내용

xml파일을 읽어 xml변수에 넣으면 엘리먼트를 구조체처럼 조작할수 있음
PS > [xml]$변수명 = Get-Content 파일명
PS > echo $변수명.엘리먼트

COM메소드 호출예(explorer)
PS > $ie = New-Object -ComObject "InternetExplorer.Application"
PS > $ie = | Get-Member -MemberType Method
PS > $ie.Navigate("웹페이지주소")
PS > $ie.Visible = &true

WMI사용
PS > Get-WmiObject 요소

'Power Shell' 카테고리의 다른 글

[ps] db 수동으로 붙이기  (0) 2009.10.07
[ps] 파워셀 기본문법 2  (0) 2009.10.07
[ps] 레지스트리 수정하기  (0) 2009.10.07
[ps] power shell 메뉴얼  (0) 2009.10.06
[ps] GUI 기반의 PowerSheel Tool (Quest PowerGUI)  (0) 2009.10.06
Posted by 동동(이재동)
Power Shell2009. 10. 7. 11:34
내가 만든 소스는

#Setting Reg for SQL TCP/IP connection
$regTCPEnablePath = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib\Tcp"
Set-ItemProperty $regTCPEnablePath -Name Enabled -Value 1
$regTCPPortPath = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib\Tcp\IPAll"
Set-ItemProperty $regTCPPortPath -Name TcpPort -Value 1433

#결과값을 저장해놓는다
$viewResult = Get-ItemProperty $regTCPEnablePath 

#restart sql server service
net stop "SQL SERVER (SQLEXPRESS)"
net start "SQL SERVER (SQLEXPRESS)"


방법은 머 이렇다.
레지스트리 접근(레지스트리 내용은 디렉터리와 동일하게 접근)
HKEY_LOCAL_MACHINE : cd HKLM:
HKEY_CURRENT_USER : cd HKCU:

레스스트리 읽기, 쓰기
PS > Get-ItemProperty 키이름
PS > Set_ItemProperty 위치 -name 키이름 -value 키값


Posted by 동동(이재동)
Power Shell2009. 10. 6. 18:53
Posted by 동동(이재동)
Power Shell2009. 10. 6. 18:52
GUI 기반의 PowerSheel Tool (Quest PowerGUI)


다운은 여기서

'Power Shell' 카테고리의 다른 글

[ps] 파워셀 기본문법 2  (0) 2009.10.07
[ps] 파워셀 기본문법  (0) 2009.10.07
[ps] 레지스트리 수정하기  (0) 2009.10.07
[ps] power shell 메뉴얼  (0) 2009.10.06
[ps] power shell 프로그램 실행하는 간단한 방법  (0) 2009.10.06
Posted by 동동(이재동)
Power Shell2009. 10. 6. 18:49
$xFilePath = "D:\nexusfile\"

$excute = $xFilePath + "x.exe"

&$excute

머 이렇게 하면 excute함수가 실행된다 & 붙여야되는것을 몰랐던것이다... ㅋㅋ


아 참고로 아귀먼트가 있으면

$excute = "notepad.exe"
$arg = "readme_ko.txt"

&$excute $arg

이런식으로 하면 된다... 바보 같이 

$excute = "noepad.exe readme_ko.txt" 이렇게 해서 실행하면 안된다.

'Power Shell' 카테고리의 다른 글

[ps] 파워셀 기본문법 2  (0) 2009.10.07
[ps] 파워셀 기본문법  (0) 2009.10.07
[ps] 레지스트리 수정하기  (0) 2009.10.07
[ps] power shell 메뉴얼  (0) 2009.10.06
[ps] GUI 기반의 PowerSheel Tool (Quest PowerGUI)  (0) 2009.10.06
Posted by 동동(이재동)