PowerShell komutları, VisualStudio 2017'den çağrıldığında tanınmıyor


1

Uygulamalarımızı bir ağ paylaşımında yayınlamak Deploy-Appiçin geliştiricilerimizin VisualStudio 2017 içinde kullandığı bir işlev yazdım Build Events > Post-build event command line.

Invoke-UnlockUzak bir sunucuda kilitli olan klasörleri + dosyaları doğrudan makinelerinin kilidini açan denilen başka bir işlev yazdım .

Şu anda, önce Invoke-Unlockel ile PowerShell'de çalışıyorlar, böylece Uygulamanın ağ paylaşımında kilidini açtıktan sonra Uygulamayı VisualStudio uygulamasında dağıtıyorsunuz.

Şimdi bunun bir Invoke-Unlockparçası oldum , Deploy-Appböylece geliştiricilerin artık bunu manuel olarak yapması gerekmiyor. Sadece buna benzer bir anahtarla arayabilirler Deploy-App xy -InvokeUnlock.

In Invoke-Unlocki kullanmak Get-SmbShareve Get-SmbOpenFile. Bu işlevi manuel olarak kullanırken her şey iyi çalıştı, ancak VisualStudio'da kullanıyorlarsa aşağıdaki hata iletisini alırlar:

9>  Get-SmbShare : The term 'Get-SmbShare' is not recognized as the name of a cmdlet, function, script file, or operable 
9>  program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
9>  At \\server\install$\Powershell-Scripts\Functions\Invoke-Unlock.ps1:28 char:22
9>  +         $LocalPath = Get-SmbShare -CimSession $Session | ? { $_.Name  ...
9>  +                      ~~~~~~~~~~~~
9>      + CategoryInfo          : ObjectNotFound: (Get-SmbShare:String) [], CommandNotFoundException
9>      + FullyQualifiedErrorId : CommandNotFoundException
9>   
9>  Get-SmbOpenFile : The term 'Get-SmbOpenFile' is not recognized as the name of a cmdlet, function, script file, or 
9>  operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try 
9>  again.
9>  At \\server\install$\Powershell-Scripts\Functions\Invoke-Unlock.ps1:32 char:9
9>  +         Get-SmbOpenFile -CimSession $Session | ? { $_.Path -like "$En ...
9>  +         ~~~~~~~~~~~~~~~
9>      + CategoryInfo          : ObjectNotFound: (Get-SmbOpenFile:String) [], CommandNotFoundException
9>      + FullyQualifiedErrorId : CommandNotFoundException
9>   

SmbKomutlar PowerShell 4.0 beri mevcuttur. Tüm Geliştiriciler, Windows 10'da PowerShell 5.1'e sahiptir.

Öyleyse neden komutlar tanınmıyor? VisualStudio bir şekilde başka bir PowerShell Sürümü kullanıyor mu? Herhangi birinin bir fikri var mı?

Düzenleme: modülün VisualStudio'da da yüklendiğinden emin olmak ipmo SmbShareiçin başında ekledim Invoke-Unlock, ancak bu hatayı alıyorum:

ipmo : The specified module 'SmbShare' was not loaded because no valid module file was found in any module directory.

Bu bana VisualStudio'nın varsayılan PowerShell Modülü dizinlerini kullanmadığını düşündürüyor?

Yanıtlar:


1

Bu gibi durumlarda genel sorun Visual Studio 2017'nin 32-bit olmasıdır, bu nedenle varsayılan olarak PowerShell'in 32-bit sürümünü uyandıracaktır. Ancak PowerShell'i 64 bit Windows'ta manuel olarak başlatırken, PowerShell'in 64 bit sürümünü kullanıyorsunuz.

Bu, PowerShell'in içeriden Visual Studio'nun dışından farklı şekilde çalışmasına neden olur.

Çözüm, bu sözdizimini kullanarak özellikle Visual Studio'dan 64-bit sürümü uyarmaktır:

%WINDIR%\SysNative\WindowsPowerShell\v1.0\PowerShell.exe

Bkz , Windows açıkladı 64 bit 'Sysnative' klasörünü 32 bit kodundan 64 bit araçları erişmek için. Bu, bir dosyaya geçmek için kullanılabilecek sanal bir klasördür, ancak "içeriği" listelenemez.
harrymc

iyi ... Bunu test etmek için bir 32-bit yazılım yok, ama cmd.exe, windows startmenu, visualstudio için cmd %WINDIR%\SysNative\WindowsPowerShell\v1.0\PowerShell.exe "gci ; pause", %WINDIR%\System32\WindowsPowerShell\v1.0\PowerShell.exe "gci ; pause"çalışır iken . fakat geliştiricilerin bunu test etmesine ve size geri dönmesine izin vereceğim
SimonS

Geliştirici az önce SysNativeYolun çalıştığını söyledi . Çok teşekkürler Harry, bu çok yardımcı oldu
SimonS
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.