2011-11-21 6 views
6

मेरे पास पावरहेल में गेट-एक्ल के बारे में कोई प्रश्न है। मुझे त्रुटि संदेश मिल रहा है, "पथ तक पहुंच अस्वीकार कर दी गई है"। मैं फ़ोल्डर के मालिक को अपने आप में बदलना चाहता हूं और फिर पावरहेल का उपयोग कर फ़ोल्डर में पूर्ण अनुमति देता हूं।जब गेट-एक्ल "एक्सेस अस्वीकृत" लौटाता है तो मैं पावरहेल के साथ किसी फ़ोल्डर के मालिक को कैसे बदलूं?

$acl = Get-Acl "C:\SomeFolder" 

मैं Windows Explorer का उपयोग कर रहा स्क्रिप्ट चलाने से पहले "somefolder" पर अनुमतियों को सेट करने के लिए: यहाँ मुझे त्रुटि दे कोड की पंक्ति है।

  • अभिगम नियंत्रण सूची
  • मालिक में कोई प्रविष्टि नहीं अपने आप

नहीं है अगर मैं अपने आप को मालिक Windows Explorer जीयूआई से पहले का उपयोग कर रहा त्रुटि संदेश प्राप्त नहीं है: वे इस प्रकार हैं पावरहेल स्क्रिप्ट चला रहा है। मुझे समझ में नहीं आता कि मुझे विंडोज एक्सप्लोरर के साथ मालिक को बदलने की अनुमति क्यों है लेकिन पावरहेल का उपयोग नहीं किया जा रहा है? मेरे पास इस मशीन पर पूर्ण व्यवस्थापक अधिकार हैं। विंडोज 7, पावरहेल 2.0, .NET 3.5।

मुझे लगता है कि मालिक को बदलने का एकमात्र तरीका है एसीएल पर मालिक सेट करें, फिर सेट-एसीएल को फ़ोल्डर में लिखने के लिए उपयोग करें। अगर कोई और तरीका है, तो कृपया मुझे बताएं? मैं पावरहेल का उपयोग कर फ़ोल्डर के मालिक को कैसे बदल सकता हूं?

उत्तर

8

विंडोज विस्टा और अप में टेकऑन.एक्सई नामक एक कमांड लाइन उपकरण शामिल है जिसे एक फ़ाइल कमांड प्रॉम्प्ट (या उन्नत पावरहेल कंसोल) से फ़ाइल सिस्टम ऑब्जेक्ट के स्वामित्व को बदलने के लिए उपयोग किया जा सकता है।

takeown /F "C:\SomeFolder" /R /D Y 

आपको सी: \ SomeFolder और फ़ाइल सिस्टम ऑब्जेक्ट्स पर स्वामित्व देना चाहिए।

+0

धन्यवाद, यह वास्तव में काम करता है! – ajh4

+0

आप आईसीएक्सएल का भी उपयोग कर सकते हैं जो मैं विंडोज 7 पर/सेटधारक स्विच के साथ विश्वास करता हूं। Takeown.exe के लिए एक विकल्प का जिक्र करने के लिए। – Paolis

4

मेरे पास हमारे निर्माण लड़के से कुछ सिस्टम कॉन्फ़िगरेशन स्क्रिप्ट हैं और मुझे Get-Acl कमांड के बारे में एक नोट याद है "कुछ पथों पर अच्छी तरह से काम नहीं कर रहा है"।

# NOTE: This method does not work well? 
#$acl = Get-Acl -Path $Path 

जिस प्रकार के पथ हम अनुमतियों को सेट कर रहे थे, वे एक डिस्क उपयोगकर्ता में बाद में व्यवस्थापक उपयोगकर्ता द्वारा बनाए गए खाली फ़ोल्डर्स थे। यह PowerShell कमांड है जिसे हमने इसके बजाए उपयोग किया था।

$acl = (Get-Item $path).GetAccessControl("Access") 

ओह, और एक बार आप एक एसीएल वस्तु है यह असली अस्पष्ट हो जाता है। मुझे नहीं पता कि यह करने का यह सबसे अच्छा तरीका है, लेकिन यह उपरोक्त संदर्भित एक ही स्क्रिप्ट से एक स्निपेट है।

$acl = (Get-Item $path).GetAccessControl("Access") 

# Setup the access rule. 
$allInherit = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit", "ObjectInherit" 
$allPropagation = [System.Security.AccessControl.PropagationFlags]"None" 
$AR = New-Object System.Security.AccessControl.FileSystemAccessRule $user, $permissions, $allInherit, $allPropagation, "Allow" 

# Check if Access already exists. 
if ($acl.Access | Where { $_.IdentityReference -eq $User}) 
{ 
    $accessModification = New-Object System.Security.AccessControl.AccessControlModification 
    $accessModification.value__ = 2 
    $modification = $false 
    $acl.ModifyAccessRule($accessModification, $AR, [ref]$modification) | Out-Null 
} 
else 
{ 
    $acl.AddAccessRule($AR) 
} 

Set-Acl -AclObject $acl -Path $Path 
+0

जवाब देने के लिए धन्यवाद। मुझे अभी भी कोड की पहली पंक्ति पर पहुंच से वंचित संदेश मिलता है। '$ acl = (Get-item $ path) .GetAccessControl (" एक्सेस ") 'मैंने GetAccessControl विधि स्वीकार करने वाले सभी संभावित तर्कों का भी प्रयास किया है (कोई नहीं, लेखा परीक्षा, स्वामी, एक्सेस, स्वामी, समूह, सभी)। लेकिन अभी भी कोई भाग्य नहीं है, प्रवेश अस्वीकार कर दिया। – ajh4

+0

आपके पास मूलभूत उपयोगकर्ता अनुमति समस्या होनी चाहिए। विभिन्न निर्देशिकाओं पर आदेश का प्रयास करना प्रारंभ करें (विंडोज़ में डीआईआर, उसी उपयोगकर्ता द्वारा बनाई गई डीआईआर, इत्यादि)। –

+0

आप सही हैं। मुझे अनुमति की समस्या थी। धन्यवाद! मैंने 'व्हामी/निजी' cmdlet का इस्तेमाल किया। मुझे पता चला कि मेरे पास SeTakeOwnershipPrivilege सक्षम नहीं है। पावरहेल का उपयोग करके इसे सक्षम करने के लिए यह बहुत गन्दा है। यहां इसे सक्षम करने के तरीके के बारे में एक उदाहरण दिया गया है [लिंक] (http://www.leeholmes.com/blog/2010/09/24/adjusting-token-privileges-in-powershell/) विशेषाधिकार सक्षम करने के बाद, मैंने एक बनाया नया एसीएल, मालिक को उस नए एसीएल पर सेट करें, और अंततः एसीएल को फ़ोल्डर में सहेजने के लिए सेट-एसीएल का इस्तेमाल किया। आपकी मदद के लिए धन्यवाद – ajh4

0

उपर्युक्त कोड बहुत अच्छा काम करता है। निर्देशिका के माध्यम से पुनरावर्ती रूप से जाने और कुछ "गायब" 0 भरने के लिए एक चिमटा पोस्ट करना चाहता था

$HomeFolders = Get-ChildItem "put your directory root here" -Directory -recurse 
foreach ($HomeFolder in $HomeFolders) { 
    $Path = $HomeFolder.FullName 
    $acl = (Get-Item $Path).GetAccessControl('Access') 
    $allInherit = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit", "ObjectInherit" 
    $allPropagation = [System.Security.AccessControl.PropagationFlags]"None" 
    $permissions = "FullControl" 
    $Username = "<put your name here>" 
    $AR = New-Object System.Security.AccessControl.FileSystemAccessRule($Username, $permissions, $allInherit, $allPropagation, "Allow") 
    if ($acl.Access | Where { $_.IdentityReference -eq $Username}) 
    { 
     $accessModification = New-Object System.Security.AccessControl.AccessControlModification 
     $accessModification.value__ = 2 
     $modification = $false 
     $acl.ModifyAccessRule($accessModification, $AR, [ref]$modification) | Out-Null 
    } 
    else 
    { 
     $acl.AddAccessRule($AR) 
    } 
    Set-Acl -path $Path -AclObject $Acl 
} 
संबंधित मुद्दे