O problema é -n1I'{}' . Você deseja dividir essas duas opções, caso contrário xargs não poderá analisá-las corretamente. Basicamente, após cada argumento de opção ( 1 e '{}' no seu caso), você precisa de um separador de espaço em branco:
dscl . -list /Users | xargs -n1 -I'{}' dscl -plist . -read /Users/{}
Ou, se você quiser apenas usar um loop simples:
for user in $(dscl . -list /Users); do dscl -plist . -read /Users/"$user"; done
Com while read , você pode usar a substituição de processos :
while read user; do dscl -plist . -read /Users/"$user"; done < <(dscl . -list /Users)
... ou você canaliza:
dscl . -list /Users | while read user; do dscl -plist . -read /Users/"$user"; done