O arquivo em lotes do Windows obtém informações do sistema de arquivos sem privilégios elevados

0

Eu tenho um arquivo de lote que precisa verificar o sistema de arquivos e escolher opções para um programa que está sendo executado com base no sistema de arquivos (que pode ser NTFS ou FAT32 neste ambiente). Para sistemas Windows eu tenho privilégios de administrador, eu posso usar 'fsutils fsinfo' para obter informações de sistema de arquivos - mas eu tenho usuários sem privilégios de administrador que podem precisar executar esse arquivo de lote, e máquinas que não necessariamente têm privilégios de administrador. Existe um equivalente a 'fsutils fsinfo' que pode obter (mas obviamente não escreve, como fsutils pode) informações do sistema de arquivos para um usuário não administrador?

    
por Trashman 17.06.2015 / 18:27

2 respostas

0

Snippet de código:

for /F %%G in ('
    wmic path win32_volume where "Caption='C:\'" get FileSystem /value^|findstr "="
  ') do for /F %%g in ("%%~G") do set "_%%~g"
set _FileSystem

Saída :

==>for /F %G in ('wmic path win32_volume where "Caption='C:\'" get FileSystem /value
^|findstr "="') do @for /F %g in ("%~G") do @set "_%~g"

==>set _FileSystem
_FileSystem=NTFS

==>

Recursos (leitura obrigatória):

Editar para obter o sistema de arquivos para todas as unidades live :

@ECHO OFF >NUL
rem SETLOCAL enableextensions
for /F %%X in ('
    wmic path Win32_LogicalDisk get caption /value^|findstr "="
  ') do for /F "tokens=2 delims==:" %%x in ("%%~X") do (

  for /F %%G in ('
      wmic path win32_volume where "Caption='%%~x:\'" get FileSystem /value^|findstr "="
    ') do for /F %%g in ("%%~G") do set "_%%~x-%%~g"

)
set _

Resultado

==>set _
Environment variable _ not defined

==>D:\bat\SU9159.bat
_C-FileSystem=NTFS
_D-FileSystem=NTFS
_E-FileSystem=CDFS

==>set _
_C-FileSystem=NTFS
_D-FileSystem=NTFS
_E-FileSystem=CDFS

==>
    
por 17.06.2015 / 20:11
0

Aqui está uma solução alternativa que também funcionou para mim, embora não tenha sido feita apenas com um arquivo em lotes:

No arquivo VBS 'GetFileSys.vbs':

Set args = Wscript.Arguments
Set objWMIService = GetObject("winmgmts:\.\root\cimv2")
Set colVols = objWMIService.ExecQuery ("select * from Win32_LogicalDisk")

For Each arg in args
    For Each objVol in colVols
        if objvol.Name = left(arg,2) then
            Wscript.Echo objVol.FileSystem
        end if
    Next
Next

(A parte superior eu pedi emprestado de paxdiablo através do link fornecido pelo Maudam, link , então adaptado às minhas necessidades)

Em seguida, no arquivo em lote, chamei o arquivo VBS com o cscript da seguinte forma:

cscript //NoLogo GetFileSys.vbs %1 %2 %3

Resultados:

NTFS
FAT32
ReFS

(nem percebi que meu sistema estava usando o ReFS até que eu executei isso)

    
por 17.06.2015 / 20:50