2013-02-03 23 views
5

Eski BAT komutumu PowerShell sürümüne dönüştürmeye çalışıyorum, ancak bir saat sonra googling yaptıktan sonra nasıl yapılacağını bilmiyorum.PowerShell'deki tüm açık ağ dosyalarını nasıl kapatırım?

Eski olana çok benzer bir yapı arıyorum, açık ağ dosyaları bul, PID'sini al ve kapat.

BAT:

for /f "skip=4 tokens=1" %a in ('net files ^| findstr C:\Apps\') do net files %a /close 

PowerShell

?

+2

: Ben PowerShell deyim olan boru hattı üzerinde daha fazla güvenir böyle. Ağ dosyalarını kapatmak yaygındır. Aynı şeylere ihtiyacım vardı. Bu soru, birisinin eski bir toplu iş dosyasını dönüştürmesini değil, daha önce nasıl yapıldığını göstermesini istemiyor. – Knox

+0

Katılıyorum, bu sorular kapatılmamalıdır. Tam olarak ihtiyacım olan şey –

+0

http://superuser.com/ için daha uygun. –

cevap

1

Net dosya hala en iyi bahistir. Böyle bir şey deneyin: Sen açık dosyaları görüntülemek için kullanabilir

$results = net file | Select-String -SimpleMatch "C:\Apps\" 
foreach ($result in $results) { 
    #Get id 
    $id = $result.Line.Split(" ")[0] 

    #Close file 
    net file $id /close 

} 
0

bu deneyin:

#capture command output 
$openfiles=net files 
#parse all lines and watch for c:\apps\ 
$openfiles| foreach { 
if($_ -like '*c:\apps\*'){ 
    #if line contains c:\apps\ split it with space, the first element will be file id 
    net files $_.split(' ')[0] /close 
} 
} 
2

:

$adsi = [adsi]"WinNT://./LanmanServer" 

$resources = $adsi.psbase.Invoke("resources") | Foreach-Object { 
    New-Object PSObject -Property @{ 
     ID = $_.gettype().invokeMember("Name","GetProperty",$null,$_,$null) 
     Path = $_.gettype().invokeMember("Path","GetProperty",$null,$_,$null) 
     OpenedBy = $_.gettype().invokeMember("User","GetProperty",$null,$_,$null) 
     LockCount = $_.gettype().invokeMember("LockCount","GetProperty",$null,$_,$null) 
    } 
} 

$resources 

Sonra kapatmak istiyor olanları süzmek:

$resources | Where-Object { $_.Path -like 'c:\apps\*'} | 
Foreach-Object { net files $_.ID /close } 
+0

Metin maşası yerine, nesne açısından zengin bir yaklaşım için gitmekten hoşlanıyorum, ancak bu durumda, bu istenmeyen bir durum. –

+0

Yup, onu bir işlevle sarın ve karmaşıklığı gizleyebilirsiniz. Bu arada, daha tamamlanmış olabilirdi, Toplama yönteminin Kaldır yöntemini kullandığı için kullanılan koleksiyon ancak eksik görünüyor. Bunun bir başka avantajı, şu anda sadece dosyaları almak için uzak makinelere karşı çalıştırma seçeneği. –

6

Burada başka bir yolu. ben bu çok dar kapsamlı veya başkalarına yardım etmek olası değildir sanmıyorum

net files | 
    where { $_.Contains("D:\") } | 
    foreach { $_.Split(' ')[0] } | 
    foreach { net file $_ /close } 
İlgili konular